Python 从Tensorflow中的模型检查点将损失值加载到numpy.array中
我在tensorflow中训练了一个深度学习模型 我想将每个历元的损耗值从检查点文件加载到Python 从Tensorflow中的模型检查点将损失值加载到numpy.array中,python,tensorflow,Python,Tensorflow,我在tensorflow中训练了一个深度学习模型 我想将每个历元的损耗值从检查点文件加载到numpy.array 我指的是下面的 np.array([3.45342, 3.23080, 2.98729, ...]) 检查点文件不包含所有时代的丢失信息吗 培训期间是否需要保存所有值 我该怎么做 检查点文件不包含所有时代的丢失信息吗 不,他们没有。检查点文件用于保存和恢复变量。它们仅包含保存时指定(或所有)变量的值,以便以后能够恢复该检查点,因此得名。由于丢失通常不是一个变量,而是一个中间张量,因
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()
但正如评论中所暗示的那样,有许多不同的方法可以在不重新发明轮子的情况下实现这样的目标。但是,由于它只有几行代码,我通常更喜欢像上面演示的那样自己做,尤其是当我需要自己的项目日志时。也许吧?我想更简单地绘制损失曲线,而不是使用tensorboard。似乎你可以。如果您确实不想使用TensorBoard,您可以在培训期间将损失存储在列表或数组中,并写入
.npy
文件,甚至写入.txt
文件。