1

我正在尝试建立一个回归模型,使用数据集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 之间的值范围。

4

1 回答 1

0

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

另外,kernel_initializer='normal'不推荐。

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

如果您仍然没有得到您期望的结果,请尝试其他参数(层数/神经元数,更多时期等);lr您应该将Adam 优化器的学习率 (

于 2019-10-01T22:43:47.537 回答