计算每轮迭代和时间的损失(均方误差)Tensorflow

我想使用Tensorboard来绘制给定时间范围内(x轴,例如5分钟)每轮迭代的均方误差(y轴)。

然而,我只能在每轮epoch结束时绘制MSE,并在5分钟时设置一个回调。这并不能解决我的问题。

我尝试在网上寻找一些解决方案,看看是否可以设置最大迭代次数而不是epoch数来进行model.fit,但没有找到合适的。我知道迭代次数是完成一个epoch所需的批次数,但因为我想调整batch_size,我更倾向于使用迭代次数。

我的代码目前如下所示:

input_size = len(train_dataset.keys())output_size = 10hidden_layer_size = 250n_epochs = 3weights_initializer = keras.initializers.GlorotUniform()#一个训练和验证模型并返回MSE的函数def train_val_model(run_dir, hparams):    model = keras.models.Sequential([            #作为网络入口点的层            keras.layers.InputLayer(input_shape=[len(train_dataset.keys())]),            #Dense层1            keras.layers.Dense(hidden_layer_size, activation='relu',                                kernel_initializer = weights_initializer,                               name='Layer_1'),            #Dense层2            keras.layers.Dense(hidden_layer_size, activation='relu',                                kernel_initializer = weights_initializer,                               name='Layer_2'),            #由于我们进行的是回归,激活函数为线性            keras.layers.Dense(output_size, activation='linear', name='Output_layer')                                ])        #使用随机梯度下降优化器,但通过改变batch_size来获得BSG、SGD或MiniSGD    optimizer = tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.0,                                        nesterov=False)        #编译模型    model.compile(optimizer=optimizer,                   loss='mean_squared_error', #计算标签和预测值之间误差的平方均值                  metrics=['mean_squared_error']) #计算y_true和y_pred之间的均方误差        #初始化TimeStopping回调     time_stopping_callback = tfa.callbacks.TimeStopping(seconds=5*60, verbose=1)        #训练网络    history = model.fit(normed_train_data, train_labels,          epochs=n_epochs,         batch_size=hparams['batch_size'],          verbose=1,         #validation_split=0.2,         callbacks=[tf.keras.callbacks.TensorBoard(run_dir + "/Keras"), time_stopping_callback])        return history#train_val_model("logs/sample", {'batch_size': len(normed_train_data)})train_val_model("logs/sample1", {'batch_size': 1})
%tensorboard --logdir_spec=BSG:logs/sample,SGD:logs/sample1

结果如下:

x轴:epochs,y轴:MSE

期望的输出应该如下所示:

x轴:分钟,y轴:MSE


回答:

答案实际上相当简单。

tf.keras.callbacks.TensorBoard有一个update_freq参数,允许你控制何时将损失和指标写入tensorboard。标准设置是epoch,但你可以将其更改为batch,或者如果想每n个批次写入tensorboard一次,可以设置为整数。更多信息请查看文档:https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注