python - 如何达到满足提前停止条件的纪元数
问题描述
如果满足某些条件,我会使用回调来停止训练过程。我想知道如何访问由于回调而停止训练的纪元数。
import numpy as np
import random
import tensorflow as tf
from tensorflow import keras
class stopAtLossValue(tf.keras.callbacks.Callback):
def on_batch_end(self, batch, logs={}):
eps = 0.01
if logs.get('loss') <= eps:
self.model.stop_training = True
training_input= np.random.random ([30,10])
training_output = np.random.random ([30,1])
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(10,)),
tf.keras.layers.Dense(15,activation=tf.keras.activations.linear),
tf.keras.layers.Dense(15, activation='relu'),
tf.keras.layers.Dense(1)
])
model.compile(loss="mse",optimizer = tf.keras.optimizers.Adam(learning_rate=0.01))
hist = model.fit(training_input, training_output, epochs=100, batch_size=100, verbose=1, callbacks=[stopAtLossValue()])
对于这个例子,我的训练在第 66 个 epoch 完成,因为损失低于 0.01。
Epoch 66/100
1/1 [==============================] - 0s 5ms/step - loss: 0.0099
-----------------------------------------------------------------
解决方案
简单的方法是获取history.history
对象的长度:
len(model.history.history['loss'])
更复杂的方法是从优化器获取迭代次数:
model.optimizer._iterations
推荐阅读
- c++ - 在 C++ 代码块中创建休息客户端?
- vba - 如何在宏生成器 Microsoft Access 中使用两个条件打开表单
- tensorflow - tfrecords 的稀疏数据集
- android - Flutter:生成发布 SHA1 指纹
- swift - Swift 将“字符”转换为“Unicode.Scalar”
- qt - PyQt4(python 2.7):QSqlQuery 无法提取值
- java - 如何在 vaadin 中创建带有复选框的网格(矩阵 4xn)?
- ios - 在 Flutter iOS 平台特定代码中使用 Cocoapods 库
- javascript - 无法在可编辑的引导程序中做大写
- slack - 我可以通过 Slack 发送需要确认的公告吗?