在构建keras
模型时,loss
(损失函数)、metrics
(度量标准)和scoring
(评分方法)之间有什么区别?它们应该相同还是不同?在一个典型的模型中,我们在GridSearchCV
中使用这三者。
这里展示了一个典型的回归模型的快照,该模型使用了这三者。
def create_model(): model = Sequential() model.add(Dense(12, input_dim=1587, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error']) return modelmodel = KerasRegressor(build_fn=create_model, verbose=0)batch_size = [10, 20, 40, 60, 80, 100]epochs = [10, 50, 100]param_grid = dict(batch_size=batch_size, epochs=epochs)grid = GridSearchCV(estimator=model,param_grid=param_grid, scoring='r2' n_jobs=-1)grid_result = grid.fit(X, Y)
回答:
不,它们是不同的,在代码中用于不同的目的。
你的代码中有两个部分。
1) Keras部分:
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])
a) loss
:在文档的编译部分这里,你可以看到:
损失函数是模型尝试最小化的目标。
因此,它实际上是与optimizer
(优化器)一起用于训练模型的。
b) metrics
:根据文档:
度量函数类似于损失函数,但评估度量的结果不会用于训练模型。
这仅用于报告度量结果,以便用户(你)可以判断模型的表现。它不会影响模型的训练方式。
2) 网格搜索部分:
scoring
:同样,查看文档
一个单一的字符串或一个可调用的对象,用于评估测试集上的预测结果。
这用于查找你定义在param_grid
中的参数组合,以获得最佳score
(得分)。
它们可以(在大多数情况下)是不同的,这取决于你的需求。