Python:无法在Keras中训练回归模型

时间:2017-10-15 13:04:09

标签: python keras regression

我正在尝试用Keras训练DNN。该模型在此定义:

model = Sequential()
model.add(Dense(2050, input_shape=(2050, 75), activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(75, activation='sigmoid'))

成本函数是mse。 这里的想法是使用一组尺寸为2050 * 75的3000张图像进行训练,这些图像基本上是从1025 * 75图像中提取的两个不同的特征,以便在输出中获得尺寸为1025 * 75的3000图像,这是某种形式表示原始图像。

因此,输入是(3000,2050,75)张量,而输出维度是(3000,1025,75)。

我可以看到为什么Keras给我以下错误:

  

ValueError:检查目标时出错:期望dense_5有形状(无,2050,75)但是有形状的数组(3000,1025,75)

必须有办法避免此错误,可能是通过重新定义DNN尺寸或图层。你有什么建议吗?感谢。

编辑:根据要求,这是完整的代码。

X = train_set
Y = m
[n_samples, n_freq, n_time] = X.shape

model = Sequential()
model.add(Dense(n_freq, input_shape=(n_freq, n_time), activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Dense(n_time, activation='sigmoid'))

model.summary()
model.compile(optimizer='rmsprop',loss='mse',metrics=['mae','accuracy'])
model.fit(np.abs(X), np.abs(Y), epochs=n_epochs, batch_size=batch_size)
score = model.evaluate(np.abs(X), np.abs(Y), batch_size = batch_size)

1 个答案:

答案 0 :(得分:0)

因为,您不能使用reshape层在内部重新整形数组,因为新数组的总大小必须保持不变。我建议使用flatten层来平衡张量。但首先,你需要重塑y:

y = y.reshape(-1, 1025*75)

更新后的模型如下所示:

model = Sequential()
model.add(Dense(n_freq, input_shape=(n_freq, n_time), activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Dense(n_hid, activation='relu'))
model.add(Flatten())
model.add(Dense(1025*75, activation='sigmoid'))

model.summary()
model.compile(optimizer='rmsprop',loss='mse',metrics=['mae','accuracy'])
model.fit(np.abs(X), np.abs(y), epochs=n_epochs, batch_size=batch_size)
#score = model.evaluate(np.abs(X), np.abs(Y), batch_size = batch_size)

之后,你可以重塑y_pred回到(-1,1015,75)形状:

y_pred = y_pred.reshape(-1,1015,75)