使用张量流恢复模型不会导致相同的预测

时间:2017-06-14 10:46:38

标签: tensorflow

我的问题围绕着Tensorflow及其tf.train.Saver()函数来保存网络状态并在之后恢复。我的代码很长很乱,但结构如下:

  • 为网络生成一组参数设置
  • 构建网络
  • 根据保存的模型文件训练网络或恢复网络
  • 预测一些外部数据

现在回答我的问题。当我使用完全相同的参数运行我的模型几次时,我得到完全相同的性能。如果我多次恢复相同的模型,我也会得到相同的性能。但是,当我训练模型和恢复模型时的性能不一样,即使恢复的模型直接来自训练模型。我试图保存整个模型(所以tf.train.Saver()创建巨大的文件)或只是可训练的变量(所以tf.train.Saver(tf.trainable_variables()),这使得文件更小)并且都给出了相同的结果,但它仍然不直接训练模型。请记住,差异通常非常小,对于我网络中的某些单独任务,它们是相同的,但差异会让我感到困惑。

我已经看到了关于Tensorflow模型保存和恢复的几个问题,但似乎没有解决我的问题。据我所知,模型正确恢复(我检查权重是否相同,似乎是)但它并没有给出完全相同的结果。我想我可以在我的代码中排除随机事件,因为在训练和恢复时我可以在给定相同参数的情况下重现相同的结果。我不知道该怎么办。

有人知道我为什么会遇到这个问题吗?

我只添加以下代码的小片段。首先我如何恢复模型:

def load_network_state(model_file):

  print('Restoring model')

  # saver = tf.train.Saver(tf.trainable_variables())
  saver = tf.train.Saver()
  sess=tf.Session()
  saver.restore(sess, model_file)
  return sess

在训练功能中:

# saver = tf.train.Saver(tf.trainable_variables()) saver = tf.train.Saver() if model_file is not None: save_path=saver.save(sess, model_file+'_{0}'.format(model_suffix))

在主循环中:

if args['restore_network']:
    params = create_parameters_from_file(args['arg_file'], args, j)
else:
    params=create_random_parameter(args)

start=time.time()
train_data, test_data = transform(train_data, test_data, params)

kwargs=generate_kwargs_dictionary(generate_network, params)
features, targets, predictions, train_op = generate_network(train_data, test_data, model_suffix=j, **kwargs)
if args['restore_network']:
    session = load_network_state(params['model_file']+'_{0}'.format(j), params['seed'])
else:
    kwargs=generate_kwargs_dictionary(network_training, params)
    session = network_training(train_data, features, targets, train_op, model_suffix=j, **kwargs)

kwargs=generate_kwargs_dictionary(network_prediction, params)    
training_results = network_prediction(train_data, features, targets, predictions, session, model_suffix=j, **kwargs)
test_results = network_prediction(test_data, features, targets, predictions, session, model_suffix=j, **kwargs)
elapsed=time.time()-start

感谢您提供的任何帮助

0 个答案:

没有答案