我遇到了以下错误…
ValueError: 无法为形状为(16,)的值提供给Tensor ‘TargetsData/Y:0’,其形状为'(?, 16)’
我明白这与我的Y
变量的形状有关,在这种情况下,变量是labels
,但我不确定如何改变形状以使我的模型正常工作。
基本上,我有一个CSV
文件,我使用pandas
将其保存到变量中…
data = pd.read_csv('Speed Dating Data.csv')
经过一些预处理后,我决定这样提取我的目标类…
# 用于训练的目标标签labels = np.array(data["age"], dtype=np.float32)
接下来我从我的data
变量中删除了这一列…
# 用于训练的数据,不包括目标标签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)# 定义模型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
应该是什么形式。我该如何解决这个问题?
回答:
根据以下方法调整你的label的形状,
label= np.reshape(label,(-1,16)) # 因为你有16个类别
这将label重塑为(?,16)的形状。
希望这对你有帮助。
根据你的需求更新。并添加了对更改的注释。
labels = np.array(data["age"], dtype=np.float32)label= np.reshape(label,(-1,1)) #重塑为[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') #由于这是一个回归问题,只有一个输出net = tflearn.regression(net)# 定义模型model = tflearn.DNN(net)model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)