python - 从 Tensorflow 中的模型检查点将损失值加载到 numpy.array
问题描述
我在 tensorflow 中训练了一个深度学习模型。
我想numpy.array
从检查点文件中加载每个时代的损失值。
我的意思是下面。
np.array([3.45342, 3.23080, 2.98729, ...])
检查点文件没有所有时代的损失信息吗?
是否需要在训练期间保存所有值?
我怎么做?
解决方案
检查点文件没有所有时代的损失信息吗?
不,他们没有。检查点文件旨在保存和恢复变量。它们仅包含保存时指定(或所有)变量的值,以便以后能够恢复该检查点,因此得名。由于损失通常不是变量而是中间张量,因此损失通常根本不保存在检查点文件中。
但当然,您可以自己简单地跟踪和保存损失,如果您不想使用 Tensorboard,则无需使用。我通常使用熊猫来做到这一点。这是实现此目的的一种方法:
import tensorflow as tf
import pandas as pd
# define a completely pointless model which just fits a single point just for
# demonstration
true = tf.placeholder(shape=(), dtype=tf.float32)
learned = tf.Variable(initial_value=0., dtype=tf.float32)
loss = tf.squared_difference(true, learned)
train = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
if __name__ == '__main__':
session = tf.Session()
session.run(tf.global_variables_initializer())
# create pandas data frame for logging
log = pd.DataFrame(columns=['loss'])
# train and append the loss to the data frame on every step
for step in range(0, 100):
log.loc[step] = session.run([train, loss], feed_dict={true: 100.})[1]
# save it
log.to_hdf('./log.h5', 'log')
训练完成后,您可以在不同的脚本中加载和绘制记录的数据,如下所示:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# load the dataframe
log = pd.read_hdf('./log.h5', 'log')
# and this is how you could get your numpy array
print(np.squeeze(log.as_matrix(columns=['loss'])))
# usually this is sufficient though, since the index is the training step
# and matplotlib can directly plot that
print(log['loss'])
plt.plot(log['loss'])
plt.ylabel('Loss')
plt.xlabel('Step')
plt.show()
但正如李旭红在评论中所建议的那样,有很多不同的方法可以在不重新发明轮子的情况下实现这样的目标。但是由于它只有几行代码,我通常更喜欢像上面演示的那样自己执行此操作,尤其是当我需要自己的项目日志记录时。
推荐阅读
- android - 地理围栏上的 BroadcastReceiver 与 IntentService
- php - 在 docker-compose.yml 中指定 php 扩展
- javascript - 试图在本地主机中找到我的文件的“真实”位置,create-react-app
- ruby-on-rails - Rails 5.2 & Bootsnap:使用 app/lib 文件时出现 NameError
- javascript - 在d3.js圆圈内填充图像?
- spring - Spring Security中的UsernamePasswordAuthenticationFilter没有被调用
- java - 注释是否适用于声明语句中的所有变量?
- docker - 退出代码 127 和“:没有这样的文件或目录”
- fortran - 如何在 f2py 中构建 .so 文件而不会出错?
- javascript - GraphQL:覆盖 slug