【问题标题】:Keras trained regression model predicts same output for all set of test featuresKeras 训练的回归模型预测所有测试特征集的相同输出
【发布时间】:2020-01-31 04:49:18
【问题描述】:

我正在尝试构建一个回归模型,该模型使用数据集 https://www.kaggle.com/shubhammehta21/movie-lens-small-latest-dataset 预测电影的“评分”。然而,在训练模型之后,预测会为所有测试特征输出相同的值。我已经阅读了以前建议调整学习率的类似功能,没有。特征并检查模型预测与训练模型是否相同。这些都不适合我。

我加载数据并处理它:

links= pd.read_csv('../input/movie-lens-small-latest-dataset/links.csv')
movies=pd.read_csv('../input/movie-lens-small-latest-dataset/movies.csv')
...

dataset=movies.merge(ratings,on='movieId').merge(tags,on='movieId').merge(links,on='movieId')

to_drop='title','genres','timestamp_x','timestamp_y','userId_y','imdbId','tmdbId']

dataset.drop(columns=to_drop,inplace=True)

dataset=pd.get_dummies(dataset)

代码显示了我如何构建回归模型。我尝试过调整神经元和层数,但这并没有影响输出。

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import Adam

model = Sequential()
model.add(Dense(13, input_dim=1586, kernel_initializer='zero', activation='relu'))
model.add(Dense(6, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal',activation='linear'))
# Compile model
adam = Adam(lr=0.001)
model.compile(loss='mean_squared_error', optimizer=adam,metrics=['mse','mae'])

model.summary()
history = model.fit(train_dataset,train_labels,batch_size=30, epochs=10,verbose=1, validation_split=0.3)
score = model.evaluate(validation_dataset,validation_labels)
print("Test score:", score)

每当我尝试预测测试数据集时:

model.predict(test_dataset)

它预测的值

3.97

所有值。我期待一个介于 0 - 5 之间的值。

【问题讨论】:

  • kernel_initializer='normal' 不推荐;删除参数以恢复为 default glorot-uniform (默认存在是有原因的,除非您有真正的理由来更改它们,我相信您在这里没有...)
  • @desertnaut 谢谢。我删除它并注意到预测输出的变化。我现在的范围在 3.7 和 4.2 之间。我想调整图层,时代,不。的神经元会对此有所帮助吗?

标签: python machine-learning keras neural-network regression


【解决方案1】:

你永远不应该(我的意思是,永远)使用kernel_initializer='zero' - 老实说,我很惊讶 Keras 中竟然存在这个选项!

另外,不推荐kernel_initializer='normal'

第一步,删除所有 kernel_initializer 参数,以便恢复为default 和推荐的kernel_initializer='glorot-uniform';请记住,默认值的存在是有原因的(通常它们工作得很好),只有当你真的有理由这样做时才应该更改它们(我相信你在这里没有)你知道你在做什么。

如果您仍然没有得到您所期望的,请尝试其他参数(层数/神经元数,更多时期等);对于初学者,您应该保留 Adam 优化器的学习率 (lr)(这也是这些默认值之一,似乎在不同情况下都能很好地工作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 2017-05-29
    • 2021-08-02
    • 2018-04-15
    • 2020-10-30
    • 2018-08-19
    • 2019-06-22
    • 2020-03-19
    相关资源
    最近更新 更多