Keras формирует входные данные для обучения и прогнозирования, повышая значение и ошибки атрибутов - PullRequest
1 голос
/ 30 мая 2020

Мне трудно вводить данные в простую модель keras как для прогнозирования, так и для обучения. Я просмотрел соответствующие вопросы, но, потратив 6 часов, пытаясь разобраться в этом самостоятельно, я все еще борюсь с этим.

Импорт и сеть:

from tensorflow import keras
from tensorflow.keras.layers import Dense
from tensorflow import convert_to_tensor
from random import randint

model = keras.Sequential()
model.add(Dense(3, activation='relu', input_dim=5))
model.add(Dense(4, activation='sigmoid'))
model.add(Dense(2))
model.compile(loss=keras.losses.MeanSquaredError(),
              optimizer='adam',
              metrics=['MeanSquaredError'])

Попытка предсказать с сеть:

X = [4, 5, 2, 8, 9]
tensor = convert_to_tensor(X)
print(tensor.shape) # Prints (5, ) as expected
prediction = model.predict(tensor)

Возникает следующая ошибка:

ValueError: Ошибка при проверке ввода: ожидалось, что density_input будет иметь shape (5,), но получил массив с shape (1 ,)

Попытка обучить сеть:

states = [[7, 8, 3, 9, 7], [0, 7, 5, 0, 3], [2, 5, 8, 1, 10], [9, 9, 9, 8, 6]]
actions = [[1, 0], [0, 1], [0, 1], [0, 1]]

tensor_states = convert_to_tensor(states)
tensor_actions = convert_to_tensor(actions)

print(tensor_states.shape)      # Prints (4, 5)
print(tensor_actions.shape)     # Prints (4, 2)

model.fit(tensor_states, tensor_actions, verbose=0)

Возникает следующая ошибка:

ValueError: TypeError: len () unized объект

Без подробного = 0 Я получаю эту ошибку:

AttributeError: объект 'ProgbarLogger' не имеет атрибута 'log_values'

I я работаю в среде conda.

Я задал предыдущий вопрос по этому топи c, но я понял, что слишком усложнил проблему и не совсем понял, о чем я спрашивал. Теперь, когда я провел больше исследований, мне кажется, что я свел свою проблему к самой простой форме c. Я написал этот новый вопрос после рассмотрения этого мета-сообщения . Если мне нужно было только что отредактировать свой предыдущий вопрос, дайте мне знать.

РЕДАКТИРОВАТЬ - Устранение неполадок с помощью darcycp

Как указано в приведенном ниже ответе, я должен дать столбец для прогнозирования сети (с использованием двух наборов скобок). Однако это дает следующую ошибку:

ValueError: TypeError: len () объекта без размера

Затем не используется тензор (поскольку функция прогнозирования keras может напрямую принимать python lists) дает следующую ошибку:

ValueError: попытка преобразовать значение (4) с неподдерживаемым типом () в тензор

Что крайне необычно мне, так как я не импортировал numpy в эту программу.

1 Ответ

1 голос
/ 30 мая 2020

Я думаю, что здесь происходит то, что ваш тензор X является тензором 5 , 1-D входов. Когда вы хотите, чтобы это был один тензор с одним входом, где допустимый вход для этой модели состоит из 5 чисел.

Попробуйте вместо этого объявить:

X =  [[4, 5, 2, 8, 9]]

Вы можете думать о X как о массиве, который может быть заполнен различными экземплярами входных данных для вашей задачи. Каждый из этих экземпляров сам по себе является массивом входных данных. Хотя в этом случае X имеет только 1 вход в другой ситуации, это может выглядеть так:

X =  [[4, 5, 2, 8, 9],[6,7,9,2,5]]

То есть X теперь список из len() == 2, каждый элемент в этом списке является входом в вашу модель. Слои Keras по умолчанию предполагают, что X будет состоять из пакетов входных данных.

...