【发布时间】:2018-04-29 01:37:44
【问题描述】:
在为图像分类任务训练卷积神经网络时,我们通常希望我们的算法能够学习将给定图像转换为正确标签的过滤器(和偏差)。我有几个模型我试图在模型大小、操作数量、准确性等方面进行比较。但是,从 tensorflow 输出的模型的大小,具体来说是 model.ckpt.data存储图中所有变量的值的文件不是我所期望的。事实上,它似乎大了三倍。
为了直接解决问题,我将基于this Jupyter 笔记本提出问题。下面是定义变量(权重和偏差)的部分:
# Store layers weight & bias
weights = {
# 5x5 conv, 1 input, 32 outputs
'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32]),dtype=tf.float32),
# 5x5 conv, 32 inputs, 64 outputs
'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64]),dtype=tf.float32),
# fully connected, 7*7*64 inputs, 1024 outputs
'wd1': tf.Variable(tf.random_normal([7*7*64, 1024]),dtype=tf.float32),
# 1024 inputs, 10 outputs (class prediction)
'out': tf.Variable(tf.random_normal([1024, num_classes]),dtype=tf.float32)
}
biases = {
'bc1': tf.Variable(tf.random_normal([32]),dtype=tf.float32),
'bc2': tf.Variable(tf.random_normal([64]),dtype=tf.float32),
'bd1': tf.Variable(tf.random_normal([1024]),dtype=tf.float32),
'out': tf.Variable(tf.random_normal([num_classes]),dtype=tf.float32)
}
为了在训练过程结束时保存模型,我添加了几行代码:
# Save the model
save_path = saver.save(sess, logdir+"model.ckpt")
print("Model saved in file: %s" % save_path)
将所有这些变量加起来我们希望得到一个大小为 12.45Mb 的 model.ckpt.data 文件(我通过计算我们的模型学习的浮点元素的数量和然后将该值转换为兆字节)。但! .data 文件保存为 39.3Mb。这是为什么呢?
我对更复杂的网络(ResNet 的一种变体)采用了相同的方法,并且我预期的 model.data 大小也比实际 .data 文件的大小小约 3 倍。
所有这些变量的数据类型都是float32。
【问题讨论】:
标签: python tensorflow jupyter-notebook conv-neural-network