Keras训练的回归模型为所有测试功能集预测相同的输出

时间:2019-10-01 21:29:54

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

我正在尝试建立一个回归模型,以使用数据集ngx-translate来预测电影的“评级”。但是,在训练模型之后,所有测试功能的预测结果都将输出相同的值。我已经阅读过以前建议调整学习率的类似功能,否。的特征并检查模型预测是否与训练后的模型相同。这些都不对我有用。

我加载数据并进行处理:

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之间。

1 个答案:

答案 0 :(得分:0)

您永远都不要使用kernel_initializer='zero'(我是说, )-老实说,我很惊讶该选项甚至存在于Keras中!

此外,不建议使用kernel_initializer='normal'

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

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