Невозможно передать значение shape (1600,) для Tensor 'TargetsData/Y:0', который имеет форму '(?, 1)'

Я пытаюсь начать машинное обучение, и я решил использовать tflearn для начала. Я использовал краткое руководство tflearn, чтобы получить основы и попытался использовать эту нейронную сеть для задачи, которую я поставил перед собой: предсказать возраст ушка по их размерам. Для этого я скачал соответствующий набор данных как .csv из хранилища UCI. Таблица в этом формате:

СЕКС | ДЛИНА | ДИАМЕТР | ВЫСОТА | ЦЕЛЬНЫЙ ВЕС | ТЯЖЕЛЫЙ ВЕС | ВЕСКА ВЕСКЕРА | ВЕС ОБОЛОЧКИ | КОЛЬЦА

Так как возраст совпадает с количеством колец, я импортировал .csv как это:

data, labels = load_csv("abalone.csv", categorical_labels=False, has_header=False)

Задача состоит в том, чтобы предсказать количество колец на основе данных, поэтому я настроил свой входной слой следующим образом:

net = tflearn.input_data(shape=[None, 8])

Добавлены четыре скрытых слоя с функцией линейной активации по умолчанию:

net = tflearn.fully_connected(net, 320)
net = tflearn.fully_connected(net, 200)
net = tflearn.fully_connected(net, 200)
net = tflearn.fully_connected(net, 320)

И выходной слой с одним узлом, поскольку есть только один результат (количество колец):

net = tflearn.fully_connected(net, 1, activation="sigmoid")
net = tflearn.regression(net)

Сейчас я инициализирую модель, но во время обучения возникает вышеуказанная ошибка:

model = tflearn.DNN(net)
model.fit(data, labels, n_epoch=1000, show_metric=True, batch_size=1600)

Полное исключение:

Traceback (most recent call last):
  File "D:\OneDrive\tensornet.py", line 34, in <module>
    model.fit(data, labels, n_epoch=1000, show_metric=True, batch_size=1600)
  File "C:\Python3\lib\site-packages\tflearn\models\dnn.py", line 215, in fit
    callbacks=callbacks)
  File "C:\Python3\lib\site-packages\tflearn\helpers\trainer.py", line 333, in fit
    show_metric)
  File "C:\Python3\lib\site-packages\tflearn\helpers\trainer.py", line 774, in _train
    feed_batch)
  File "C:\Python3\lib\site-packages\tensorflow\python\client\session.py", line 767, in run
    run_metadata_ptr)
  File "C:\Python3\lib\site-packages\tensorflow\python\client\session.py", line 944, in _run
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (1600,) for Tensor 'TargetsData/Y:0', which has shape '(?, 1)'

Из того, что я понимаю, исключение возникает, когда я пытаюсь подогнать мои метки (тензор 1600x1) к выходному слою. Но я не знаю, как это исправить.

1 ответ

Решение

Вам нужно добавить еще одну ось к меткам, чтобы они имели форму (1600,1) вместо (1600,)

Самый простой способ сделать это так:

 labels = labels[:, np.newaxis]
Другие вопросы по тегам