python - 在神经网络中找到最佳学习率和时期
问题描述
我创建了一个单层神经网络,具有两个输出(每个类一个,0 或 1),使用 sigmoid 方法和 SGD 优化器进行训练。我还训练了没有任何隐藏层的 NN。此外,我已经使用 StratifiedKFold 和 4 个拆分验证了模型的性能。训练的模型设计为 lr=0.1 和 epochs=150,但是,我不知道这些值是否在优化模型。出于这个原因,我想运行 20 种学习率参数和 epoch 的组合,以查看最准确的结果以及我获得这些参数的哪个组合。在限制之下:
- epochs:值在 10 到 150 之间
- 学习率:0.01 到 1 之间的值
请看下面的代码:
from sklearn.model_selection import StratifiedKFold
from keras.models import Sequential
from keras.layers.core import Dense
from keras import layers
from keras.optimizers import SGD
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
#Function to create the NN model
def create_model():
#Neural Network model
ann = Sequential()
#Number of columns of training dataset
n_cols = x_train.shape[1]
#Output
ann.add(Dense(units=1,activation='sigmoid',input_shape=(n_cols,)))
#SGD Optimizer
sgd = SGD(lr=0.1)
#Compile with SGD optimizer and binary_crossentropy
ann.compile(optimizer=sgd,
loss='binary_crossentropy',
metrics=['accuracy'])
return ann
#Creating the model
model=KerasClassifier(build_fn=create_model,epochs=150,batch_size=10,verbose=0)
#Evaluating the model using StratifiedKFold
kfold = StratifiedKFold(n_splits=4, shuffle=True, random_state=2)
results=cross_val_score(model,x_train,y_train,cv=kfold)
#Accuracies
print(results)
为了创建由学习率和 epochs 组成的 20 个组合,首先,我创建了 lr 和 epochs 的随机值:
#Epochs
epo = np.random.randint(10,150)
#Learning Rate
learn = np.random.randint(0.01,1)
我的问题是我不知道如何将其放入 NN 的代码中,以便找到哪个组合可以提供模型的最佳精度。
解决方案
无需优化您可以轻松使用 early stop 的 epoch 数量,当您的损失或准确性没有改善时它将停止,因此只需将您的 epoch 设置一个大数字(例如 300 )并添加:
keras.callbacks.callbacks.EarlyStopping(monitor='val_loss', min_delta=0.1)
您还可以通过以下方式调用最佳权重(就在模型开始过度拟合之前):
restore_best_weights=True
推荐阅读
- windows - 无论我尝试构建什么,Docker都有相同的错误(Windows 10)
- python - PyQt5,QByteArray切片返回str,如何获取字节或int?
- c# - 如何从 xrTableRow xtraReport 控制 xrTableCell
- mysql - 如何将数据从 WordPress 多站点环境迁移到单站点环境?
- angular - 用户在应用程序中处于非活动状态一段时间后,Ionic 3 重定向?
- c# - 如何从控制面板使 RDLC 使用日期格式
- mongodb - Mongodb:是否可以在一个查询中执行此操作?
- java - 如果 JSON 字符串包含大于 10 位的数字,则 404 弹簧控制器错误
- python - 验证 FlaskForm (Flask-WTForms) SelectField 填充 AJAX
- sql - SQL Server:比较 where 子句中的两列