Модель tflearn DNN выдает ошибку TargetsData/Y:0

Я получаю следующую ошибку...

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

Я понимаю, что это связано с формой моей переменной Y, которая в данном случае является переменной labels, но я не знаю, как изменить форму, чтобы моя модель работала.

По сути, у меня есть файл CSV, который я сохранил в переменной, используя pandas...

data = pd.read_csv('Speed Dating Data.csv')

После некоторой предварительной обработки я решил извлечь свой целевой класс так...

# Target label used for training
labels = np.array(data["age"], dtype=np.float32)

Затем я удалил этот столбец из моей переменной data...

# Data for training minus the target label.
data = np.array(data.drop("age", axis=1), dtype=np.float32)

Затем я решил настроить свою модель...

net = tflearn.input_data(shape=[None, 32])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 16, activation='softmax')
net = tflearn.regression(net)

# Define model.
model = tflearn.DNN(net)

model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)

Если я запускаю это, я получаю ошибку выше. Поскольку мой labels кажется (16,), но мне нужно, чтобы он был (?, 16), я попробовал следующий код...

labels = labels[np.newaxis, :]

Но это дает еще одну ошибку. Думаю, я не уверен, какой должна быть форма моего целевого класса, labels. Как я могу это исправить?


person buydadip    schedule 07.11.2017    source источник


Ответы (1)


Измените форму ярлыка следующим образом:

label= np.reshape(label,(-1,16)) # since you have 16 classes

которые изменяют форму label на (?,16).

Надеюсь это поможет.

Обновлено в соответствии с вашими требованиями. И добавлены комментарии к изменениям.

labels = np.array(data["age"], dtype=np.float32)
label= np.reshape(label,(-1,1)) #reshape to [6605,1]

data = np.array(data.drop("age", axis=1), dtype=np.float32)

net = tflearn.input_data(shape=[None, 32])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 1, activation='softmax') #Since this is a regression problem only one output
net = tflearn.regression(net)

# Define model.
model = tflearn.DNN(net)

model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)
person Nipun Wijerathne    schedule 07.11.2017
comment
Это решило эту проблему, но теперь у меня есть другая. ValueError: Dimension size must be evenly divisible by 16 but is 6605 for 'Reshape' (op: 'Reshape') with input shapes: [6605], [2] and with input tensors computed as partial shapes: input[1] = [?,16]. - person buydadip; 07.11.2017
comment
Так что мои labels не делятся на 16, по-видимому, я не думал, что это должно быть. Есть ли какое-нибудь быстрое решение этой проблемы? - person buydadip; 07.11.2017
comment
Можете ли вы опубликовать форму как метки, так и данных? - person Nipun Wijerathne; 07.11.2017
comment
Поскольку ваши данные метки - это возраст, я полагаю, вы решаете проблему регрессии, а не классификации? - person Nipun Wijerathne; 07.11.2017
comment
Да, форма для labels — это (6605,), а форма для data — это (6605, 32) - person buydadip; 07.11.2017
comment
И да, это проблема регрессии, я пытаюсь предсказать возраст на основе набора функций data. - person buydadip; 07.11.2017
comment
Я обновил свой ответ. Поскольку это проблема регрессии, ваш вывод модели должен быть 1. Пожалуйста, используйте обновленный код. - person Nipun Wijerathne; 07.11.2017