Python 又一个",;检查目标时出错:预期密集_2具有形状(4),但获得具有形状(1)的数组;

Python 又一个",;检查目标时出错:预期密集_2具有形状(4),但获得具有形状(1)的数组;,python,keras,tf.keras,Python,Keras,Tf.keras,我在Python3中使用Keras。我遇到的问题似乎与其他许多问题类似,我所能说的最好情况是可能需要使用flatte(),尽管我不知道如何正确设置参数。我得到一个错误: ValueError:检查目标时出错:预期密集_2具有形状 (4,)但得到了形状为(1,)的数组 我的数据不是图像,但它们是我在数据帧中转换的序列 model = Sequential() model.add(Dense(30, input_dim=16, activation='relu')) model.add(Dense(

我在Python3中使用Keras。我遇到的问题似乎与其他许多问题类似,我所能说的最好情况是可能需要使用flatte(),尽管我不知道如何正确设置参数。我得到一个错误:

ValueError:检查目标时出错:预期密集_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_列的值是这两个元组中的1627个:

(1494,3)(1080,2)(1863,2)(919,4)(1700,2)(710,4)(1365,4)(1815,3)(1477,2)(1618,1)

主题编号是每个tuble中的第一个条目,第二个条目是作为培训目标的值

虽然我看到在dense_2中将BinSizeList从4更改为2会导致预期形状从(4,)更改为(2,),但我不知道如何使用“展平”(如果需要的话)来正确设置值的格式

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 30)                510       
_________________________________________________________________
dense_2 (Dense)              (None, 4)                 124       
=================================================================
Total params: 634
Trainable params: 634
Non-trainable params: 0

非常感谢您的帮助。

考虑到您的模型摘要,模型需要输入shape
(batch\u size,16)
和目标shape
(batch\u size,4)

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

解决方案:将其更改为单热变量(例如使用
tf.one\u hot(y,n类)
),错误应消失

将numpy导入为np
导入tensorflow作为tf
输入尺寸=16
隐藏尺寸=30
n_类=4
model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(hidden\u dim,input\u dim=input\u dim,activation='relu'))
add(tf.keras.layers.Dense(n_类,input_dim=hidden_dim,activation='relu'))
compile(loss='classifical_crossentropy',optimizer='adam',metrics=['accurity'])
X=np.random.randn(100,输入尺寸)
y=np.random.randint(0,n_类,大小=(100,))
模型拟合(X,y)
#ValueError:形状(无,1)和(无,4)不兼容
y=tf.one_hot(y,n_类)
模型拟合(X,y)
#工作!