【问题标题】:why keras model param values change when it is accessed in a tensorflow session?为什么在 tensorflow 会话中访问 keras 模型参数值会发生变化?
【发布时间】:2018-12-13 11:07:59
【问题描述】:

我的迁移学习实施遇到了问题。我想我找到了根本原因,但我不清楚它为什么会这样。这是解释...

如果我创建一个模型(例如来自 keras.applications 的 resnet50),然后尝试在 tensorflow 会话中使用它,权重会突然发生变化。 这是一个简单的例子:

首先导入必要的库:

import tensorflow as tf
from keras.applications.resnet50 import ResNet50
from keras.models import Model

然后定义模型如下:

model = ResNet50(weights='imagenet')

现在从其中一层打印出参数如下:

model.get_layer('conv1').get_weights()

输出很长,但开头如下:

[array([[[[ 2.82526277e-02, -1.18737184e-02,  1.51488732e-03, ...,
           -1.07003953e-02, -5.27982824e-02, -1.36667420e-03],
          [ 5.86827798e-03,  5.04415408e-02,  3.46324709e-03, ...,
            1.01423981e-02,  1.39493728e-02,  1.67549420e-02],
          [-2.44090753e-03, -4.86173332e-02,  2.69966386e-03, ...,
           -3.44439060e-04,  3.48098315e-02,  6.28910400e-03]],

在程序的后面,我需要从 csv 文件中读取一些数据。我尝试使用来自 tensorflow 的数据集 API 来读取数据。为此,我创建了一个 tensorflow 会话。如果我想在 tensorflow 会话中使用模型,我会看到模型参数发生了变化。

这是一个代码示例:

init_global_var = tf.global_variables_initializer() 
with tf.Session() as sess:
  sess.run(init_global_var)
  print(model.get_layer('conv1').get_weights())

输出开始如下:

[array([[[[ 3.95432524e-02, -2.38095019e-02, -1.64129660e-02, ...,
          -2.83494107e-02,  2.25975104e-02, -1.48569904e-02],
         [ 2.40861587e-02,  1.48933977e-02, -4.10864130e-02, ...,
          -3.18703875e-02, -9.43836942e-03,  1.18204653e-02],
         [ 2.99405716e-02,  1.69009715e-03, -1.43084712e-02, ...,
          -2.93575712e-02,  2.70796008e-02, -3.17203328e-02]],

由于我还没有训练模型,我希望看到相同的参数值,但它们不一样!

所以问题是:我必须在 tensorflow 会话中创建模型吗?为什么我的 resnet50 模型可以访问,但在 tensorflow 会话中具有不同的参数值?

【问题讨论】:

  • 所有权重都保存在save_weights中。如果能提供错误信息和重现错误的示例代码就更好了。
  • @Yu-Yang,谢谢你的回答!我一直在研究这个问题,并在很大程度上更新了上面的问题。非常欢迎您的新 cmets。
  • 我认为你不应该运行global_variables_initializer。这将重新初始化权重。
  • 是的,我发现运行初始化程序会破坏一切。但一般建议似乎不是在这种情况下创建新的 tf 会话。 Stackoverflow 中有一个与此相关的类似问题。我把链接放在下面的答案中。

标签: tensorflow machine-learning keras conv-neural-network


【解决方案1】:

看起来,这个问题是 Tensorflow 中另一个问题的复制品。请查看此问题以获得答案:

Integrating Keras model into TensorFlow

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2011-07-19
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多