Python ValueError:检查目标时出错:预期密集_22具有形状(100,50),但获得具有形状(1,50)的数组

Python ValueError:检查目标时出错:预期密集_22具有形状(100,50),但获得具有形状(1,50)的数组,python,machine-learning,keras,nlp,tf-idf,Python,Machine Learning,Keras,Nlp,Tf Idf,我正在训练一个神经网络,从一组文档中预测文档频率 因此,主要思想是将包含100个文档和50个标记的矩阵映射到相应的文档频率数组 X=(n_样本,100,50)->y=(n_样本,1,50) 我的代码是: model = Sequential() model.add(Dense(50, activation='sigmoid', input_shape=(100,50))) model.add(Dense(50)) model.compile(optimizer='rmsprop', loss='

我正在训练一个神经网络,从一组文档中预测文档频率

因此,主要思想是将包含100个文档和50个标记的矩阵映射到相应的文档频率数组

X=(n_样本,100,50)->y=(n_样本,1,50)

我的代码是:

model = Sequential()
model.add(Dense(50, activation='sigmoid', input_shape=(100,50)))
model.add(Dense(50))
model.compile(optimizer='rmsprop', loss='mse')
model.fit(X_train, y_train, epochs=50)
但我有一个错误:

ValueError: Error when checking target: expected dense_22 to have shape (100, 50) but got array with shape (1, 50)

这是因为您的输入是二维的,所以您的模型摘要如下所示

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 100, 50)           2550      
_________________________________________________________________
dense_2 (Dense)              (None, 100, 50)           2550      
=================================================================
Total params: 5,100
Trainable params: 5,100
Non-trainable params: 0
_________________________________________________________________
尝试在
densed_1
densed_2
之后重塑张量形状,方法是在第二个轴上求和/平均值,以获得与
Y
相同的形状

以下是我的示例供您参考

我编写了一个定制的求和函数,对第二个轴求和,使(None,100,50)的张量为(None,1,50)。然后,添加另一个致密层

将keras.backend导入为K
从keras.layers导入稠密,λ
从keras.models导入顺序
def mysum(x):
返回K.sum(x,轴=1,keepdims=True)
def mysum_输出_形状(输入_形状):
形状=列表(输入形状)
打印(形状)
形状[1]=1
返回元组(形状)
#随机生成数据
将numpy作为np导入
X_序列=np.随机.正常(0,1,(50100,50))
y_系列=np.系列((50,1,50))
模型=顺序()
添加模型(密集型(50,激活=sigmoid',输入_形=(100,50)))
添加(Lambda(mysum,output\u shape=mysum\u output\u shape))
模型.添加(密度(50))
compile(优化器='rmsprop',loss='mse')
模型拟合(X_序列,y_序列,历次=50)

重要的是要知道你的输入是什么,以及张量是如何通过每一层变换的。希望这有帮助

这是因为您的输入是二维的,因此您的模型摘要如下所示

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 100, 50)           2550      
_________________________________________________________________
dense_2 (Dense)              (None, 100, 50)           2550      
=================================================================
Total params: 5,100
Trainable params: 5,100
Non-trainable params: 0
_________________________________________________________________
尝试在
densed_1
densed_2
之后重塑张量形状,方法是在第二个轴上求和/平均值,以获得与
Y
相同的形状

以下是我的示例供您参考

我编写了一个定制的求和函数,对第二个轴求和,使(None,100,50)的张量为(None,1,50)。然后,添加另一个致密层

将keras.backend导入为K
从keras.layers导入稠密,λ
从keras.models导入顺序
def mysum(x):
返回K.sum(x,轴=1,keepdims=True)
def mysum_输出_形状(输入_形状):
形状=列表(输入形状)
打印(形状)
形状[1]=1
返回元组(形状)
#随机生成数据
将numpy作为np导入
X_序列=np.随机.正常(0,1,(50100,50))
y_系列=np.系列((50,1,50))
模型=顺序()
添加模型(密集型(50,激活=sigmoid',输入_形=(100,50)))
添加(Lambda(mysum,output\u shape=mysum\u output\u shape))
模型.添加(密度(50))
compile(优化器='rmsprop',loss='mse')
模型拟合(X_序列,y_序列,历次=50)

重要的是要知道你的输入是什么,以及张量是如何通过每一层变换的。希望这有帮助

您是否尝试过
model.fit((X\u-train,y\u-train,epochs=50)
model.fit参数必须是两组不同的数据:训练和测试,而不是元组。您是否尝试过
model.fit((X\u-train,y\u-train,epochs=50)
model.fit参数必须是两组不同的数据:训练和测试,而不是元组。