Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras模型_Python_Pandas_Keras - Fatal编程技术网

Python Keras模型

Python Keras模型,python,pandas,keras,Python,Pandas,Keras,我已经使用Keras实现了一个神经网络,现在我想尝试不同的输入特征组合,并进行超参数调整。 到目前为止,我使用MSE作为损失,MAE作为度量。我的代码如下所示: #Create the model model = Sequential() #Add first hidden layer model.add(Dense(units=10, input_dim=n_features, activation='relu')) #Add output layer model.add(Dense(u

我已经使用Keras实现了一个神经网络,现在我想尝试不同的输入特征组合,并进行超参数调整。 到目前为止,我使用MSE作为损失,MAE作为度量。我的代码如下所示:

#Create the model
model = Sequential()

#Add first hidden layer
model.add(Dense(units=10, input_dim=n_features, activation='relu')) 

#Add output layer
model.add(Dense(units=1, activation='sigmoid'))

model.summary()

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

history = model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_val, y_val))

result = pd.DataFrame(history.history)
result.head(5)
这给了我训练损失和mae,以及每个历元后的验证损失和mae

现在,当比较不同的网络时,我想用一个损耗值来比较。 我不确定是否可以只使用model.evaluate()及其功能

#store and print validation loss and validation mae
val_loss = model.evaluate(x_val, y_val, verbose=0)[0]
val_mae = model.evaluate(x_val, y_val, verbose=0)[1]
print('validation loss (MSE):', val_loss, '\nvalidation MAE:', val_mae)
我从model.evaluate()得到的输出与我在所有100个历元中取最小损失或MAE的结果不同。
那么model.evaluate()做什么呢?

训练模型时,keras会在每个历元(数据集的迭代)后记录损失。很可能在训练过程中,你的模型找到了一个很好的极小值(比如在第50纪元),但随后又跳到另一个极小值(在第99纪元),该极小值稍差,并在那里停止训练

如果NNs参数(而非超参数)与第50个历元中的参数相等,则将所有100个历元的最小损失计算为损失

model.evaluate()只需将您的神经网络保持原状(在历元100),计算预测,然后计算损失


因此,最小损失可能比model.evaluate()小(尽管对于良好的超参数来说只是轻微),但是model.evaluate()会告诉您NN当前的位置。

当您使用sigmoid作为最后一个激活函数时,MSE不是正确的损失函数。

我建议'binary\u crossentrophy'或者不要在最后一层中使用任何激活函数,而使用'mse'作为损失函数

-MULTI LABEL CLASSIFICATION
activation: sigmoid 
loss: binary_crossentrophy

-MULTI CLASS CLASSIFICATION
activation: softmax
loss: categorical_crossentrophy

REGRESSION (-inf, +inf)
Activation: None
loss: mse
在类别和标签分类中,您要检查预测正确的次数,而在使用MSE时,您要检查与实际正确值的距离


因此,这是一种不同类型的测量误差。

使用“提前停止”和“恢复权重”来实现这一点。然而,我处理的是回归,而不是分类问题。我的预测值需要在0到1之间。因此,我认为sigmoid作为输出层的激活函数和mse作为损耗函数是合适的。如果我错了,请纠正我。好的,如果你有回归问题,你应该保留激活函数的默认值。