我正在尝试用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)
答案 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)