tensorflow - 如何使用 Saver 对象保存 TensorFlow 中的变量字典?

标签 tensorflow

我在 TensorFlow 中构建了一个简单的 4 层神经网络(2 个隐藏层)。我没有使用 TensorFlow 提供的内置神经网络,而是实现了我自己的基本版本。现在,为了将 W(权重)和 B(偏差)张量保留在一个位置,我构建了这些变量的字典,如下所示:

weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

在了解这些参数后,我想使用 Saver 对象保存它们。我试过这个:

saver = tf.train.Saver([weights,biases])
save_path = saver.save(sess,"./data/model.ckpt")

但是我没有成功。看到的错误是:

TypeError: unhashable type: 'dict'

现在,一个解决方案是将所有变量:h1,h2,out,b1,b2,bias_out(在偏差字典之外)分成单独的变量并保存它们,但这似乎是一种幼稚的方法。如果以后有更多变量需要组合在一起,我希望保持这种方式,这样更干净、更易于管理。如何将分组的变量保存在一起?

最佳答案

Tensorflow Saver 不接受字典列表。也许你应该尝试merge your dictionaries first :

parameters = weights.copy()
parameters.update(bias)

或者(使用 Python 3.5)

parameters = {**weights,**bias}

之后:

saver = tf.train.Saver(parameters)
save_path = saver.save(sess,"./data/model.ckpt")

另一种解决方案:

saver = tf.train.Saver({name:variable for name,variable in weights.items()+bias.items()})
save_path = saver.save(sess,"./data/model.ckpt")

最后一种解决方案可能存在一些问题,例如“out”作为权重和偏差的关键,因此似乎只会保存一个[“out”:variable]。

关于tensorflow - 如何使用 Saver 对象保存 TensorFlow 中的变量字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740871/

相关文章:

python - 如何将数组作为 Keras 模型的答案传递

python - 可以在基于 TensorFlow docker 镜像的 docker 容器中使用 python 3.5 吗?

python - 加入 Keras 中每个输出的指标(在多个输出中)

python - 避免 tensorflow 中的重复图(LSTM 模型)

tensorflow - 使用 TensorFlow hessians 进行二阶偏导数测试

python - 如何将以下tensorflow代码转入pytorch

python - tf.train.ExponentialMovingAverage 和 tf.train.MomentumOptimizer 有什么区别?

python - TensorFlow 图像读取和显示

python - 如何使用 tensorflow 计算多标签前k个精度?

python - 为什么 tensorflow reshape 数组超出范围