为了账号安全,请及时绑定邮箱和手机立即绑定

另一个“检查目标时出错:期望dense_2具有形状(4,)但得到形状为(1,)的数组”

另一个“检查目标时出错:期望dense_2具有形状(4,)但得到形状为(1,)的数组”

收到一只叮咚 2023-10-11 21:34:01
我在 Python 3 中使用 Keras。我遇到的问题似乎与许多其他问题相似,我能告诉的最好的情况是我可能需要使用 Flatten(),尽管我不知道如何正确设置参数。我收到错误:ValueError:检查目标时出错:预期dense_2具有形状(4,)但得到形状为(1,)的数组我的数据还不是图像,但它们是我已转换为数据帧的序列。model = Sequential()model.add(Dense(30, input_dim=16, activation='relu'))model.add(Dense(len(TheBinsizeList), activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])model.fit(Train_Columns, TrainTarget_Columns.to_frame(), epochs=100, batch_size=64)print(Train_Columns.shape)# Gives a value of (1627, 16)print((TrainTarget_Columns.to_frame()).shape)# Gives a value of (1627,1)现在 TrainTarget_Columns 的值是这两个元组中的 1627:(1494, 3) (1080, 2) (1863, 2) (919, 4) (1700, 2) (710, 4) (1365, 4) (1815, 3) (1477, 2) (1618, 1)...主题编号是每个管中的第一个条目,第二个条目是训练目标的值。虽然我看到将密集_2 中的 TheBinsizeList 从 4 更改为 2 会导致预期形状从 (4,) 变为 (2,),但我不知道如何使用 Flatten (如果需要的话)来正确格式化值。Model: "sequential_1"_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================dense_1 (Dense)              (None, 30)                510       _________________________________________________________________dense_2 (Dense)              (None, 4)                 124       =================================================================Total params: 634Trainable params: 634Non-trainable params: 0任何帮助表示赞赏和感谢。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

考虑到您的模型摘要,模型需要输入 shape(batch_size, 16)和目标 shape (batch_size, 4)。


如果你的目标的形状是(1627,1)你的问题。


解决方案:将其更改为一个热变量(例如使用tf.one_hot(y, n_classes)),错误应该消失


import numpy as np

import tensorflow as tf


input_dim = 16

hidden_dim = 30

n_classes = 4


model = tf.keras.Sequential()

model.add(tf.keras.layers.Dense(hidden_dim, input_dim=input_dim, activation='relu'))

model.add(tf.keras.layers.Dense(n_classes, input_dim=hidden_dim, activation='relu'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])


X = np.random.randn(100, input_dim)

y = np.random.randint(0, n_classes, size=(100,))


model.fit(X, y)

# ValueError: Shapes (None, 1) and (None, 4) are incompatible


y = tf.one_hot(y, n_classes)

model.fit(X, y)

# Works !


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信