Python Tensorflow/Keras:型号';s输出层期望的输入形状与它接收的不同

Python Tensorflow/Keras:型号';s输出层期望的输入形状与它接收的不同,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,几天来,我一直在寻找这个问题的答案,但我在互联网上找到的任何东西似乎都不适用于我遇到的错误: ValueError: Error when checking target: expected dense_1 to have shape (1, 300) but got array with shape (1, 60) 以下是我正在使用的模型: model = keras.Sequential([ keras.layers.Conv1D(5,input_shape=(1,60), kernel_

几天来,我一直在寻找这个问题的答案,但我在互联网上找到的任何东西似乎都不适用于我遇到的错误:

ValueError: Error when checking target: expected dense_1 to have shape (1, 300) but got array with shape (1, 60)
以下是我正在使用的模型:

model = keras.Sequential([
keras.layers.Conv1D(5,input_shape=(1,60), kernel_size=12, padding='same'), 
keras.layers.Conv1D(10, padding='same',activation=tf.nn.relu, kernel_size=10),
keras.layers.Conv1D(20, padding='same',activation=tf.nn.relu, kernel_size=6),
keras.layers.Conv1D(30, padding='same',activation=tf.nn.relu, kernel_size=5),
keras.layers.Dense(70, activation=tf.nn.relu),
keras.layers.Dense(300,activation="tanh")
]) 
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='mse',
metrics=['mae'])
我能够拥有网络训练的唯一方法是将我的输出层中的节点数(在本例中,错误消息中的密集_1)设置为等于60,即我的模型为其输入接受的值的数目

我还通过一个完全连接的模型运行了这些数据,在这个模型中出现了相同的结果,如果输出中的节点数不是60,则会出现错误

我试图通过在tensorflow网站上运行mnist fashion classification示例来排除故障,看看是否是我的tensorflow或python版本引起了问题,但是运行时没有出现错误,而且训练良好

然后,我用mnist fashion示例中使用的模型替换了我的模型,除了将输入形状更改为(60),因为我的数据是一维的,我得到了相同的精确误差:

ValueError: Error when checking target: expected dense_1 to have shape (10,) but got array with shape (60,)
除了这一次,它显示了对输入形状的轻微改变,因为第一个错误发生在一个模型中,Conv1D被输入


所有这些都让我相信错误存在于我的数据中,因为我非常确信这不是我的模型中的错误,因为它发生在多个不同的模型中。

您需要添加
Flatten
层,以便
Conv1D
层中的数据在
Dense
层中被展平

model = keras.Sequential([
keras.layers.Conv1D(5,input_shape=(1,60), kernel_size=12, padding='same'), 
keras.layers.Conv1D(10, padding='same',activation=tf.nn.relu, kernel_size=10),
keras.layers.Conv1D(20, padding='same',activation=tf.nn.relu, kernel_size=6),
keras.layers.Conv1D(30, padding='same',activation=tf.nn.relu, kernel_size=5),
keras.layers.Flatten(), # This layer should be added
keras.layers.Dense(70, activation=tf.nn.relu),
keras.layers.Dense(300,activation="tanh")
]) 
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='mse',
metrics=['mae'])

您需要添加
展平
层,以便将
Conv1D
层中的数据展平为
密集

model = keras.Sequential([
keras.layers.Conv1D(5,input_shape=(1,60), kernel_size=12, padding='same'), 
keras.layers.Conv1D(10, padding='same',activation=tf.nn.relu, kernel_size=10),
keras.layers.Conv1D(20, padding='same',activation=tf.nn.relu, kernel_size=6),
keras.layers.Conv1D(30, padding='same',activation=tf.nn.relu, kernel_size=5),
keras.layers.Flatten(), # This layer should be added
keras.layers.Dense(70, activation=tf.nn.relu),
keras.layers.Dense(300,activation="tanh")
]) 
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='mse',
metrics=['mae'])

一旦我添加了这个,我就面临着另一个类似的错误:期望稠密_1有2维,但得到了具有形状的数组(482,1,60)。同样,正如我在帖子中所说的,它也发生在只有密集层的模型上。一旦我添加了这一点,我就面临另一个类似的错误:期望密集层1具有二维,但得到了具有形状的数组(482,1,60)。正如我在帖子中所说,它也发生在只有致密层的模型上