首页 文章

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

提问于
浏览
1

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

    因为,您无法使用reshape层在内部重新整形数组,因为新数组的总大小必须保持不变 . 我建议使用flatten层来 balancer 张量 . 但首先,你需要重塑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)
    

相关问题