Загрузка значений потерь в numpy.array из контрольной точки модели в Tensorflow - PullRequest
0 голосов
/ 30 апреля 2018

Я обучил модели глубокого обучения тензорному потоку.

Я бы хотел загрузить значения потерь каждой эпохи в numpy.array из файла контрольных точек.

Я имею в виду ниже.

np.array([3.45342, 3.23080, 2.98729, ...])

Не содержат ли файлы контрольных точек информацию о потерях всех эпох?

Нужно ли сохранять все значения во время тренировки?

Как мне это сделать?

1 Ответ

0 голосов
/ 30 апреля 2018

Разве файлы контрольных точек не имеют информации о потерях всех эпох?

Нет, они этого не делают. Файлы контрольных точек предназначены для сохранения и восстановления переменных. Они содержат только значения указанных (или всех) переменных во время сохранения, чтобы впоследствии можно было восстановить эту контрольную точку, отсюда и имя. Поскольку потеря обычно не переменная, а промежуточный тензор, потеря обычно вообще не сохраняется в файлах контрольных точек.

Но, конечно, вы можете просто отслеживать и сохранять потери самостоятельно, без использования 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()

Но, как LI Xuhong предлагает в комментариях, есть много разных способов достичь чего-то подобного, не изобретая колесо. Но так как это всего лишь несколько строк кода, я обычно предпочитаю делать это сам, как показано выше, особенно когда мне все равно нужна моя собственная регистрация для проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...