Python 从Tensorflow中的模型检查点将损失值加载到numpy.array中

Python 从Tensorflow中的模型检查点将损失值加载到numpy.array中,python,tensorflow,Python,Tensorflow,我在tensorflow中训练了一个深度学习模型 我想将每个历元的损耗值从检查点文件加载到numpy.array 我指的是下面的 np.array([3.45342, 3.23080, 2.98729, ...]) 检查点文件不包含所有时代的丢失信息吗 培训期间是否需要保存所有值 我该怎么做 检查点文件不包含所有时代的丢失信息吗 不,他们没有。检查点文件用于保存和恢复变量。它们仅包含保存时指定(或所有)变量的值,以便以后能够恢复该检查点,因此得名。由于丢失通常不是一个变量,而是一个中间张量,因

我在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()

但正如评论中所暗示的那样,有许多不同的方法可以在不重新发明轮子的情况下实现这样的目标。但是,由于它只有几行代码,我通常更喜欢像上面演示的那样自己做,尤其是当我需要自己的项目日志时。

也许吧?我想更简单地绘制损失曲线,而不是使用tensorboard。似乎你可以。如果您确实不想使用TensorBoard,您可以在培训期间将损失存储在列表或数组中,并写入
.npy
文件,甚至写入
.txt
文件。