我正在尝试用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 回答
因为,您无法使用reshape层在内部重新整形数组,因为新数组的总大小必须保持不变 . 我建议使用flatten层来 balancer 张量 . 但首先,你需要重塑y:
更新后的模型如下所示:
之后,你可以重塑y_pred回到(-1,1015,75)形状: