Python 2.7 Tensorflow深度学习-模型大小和参数

Python 2.7 Tensorflow深度学习-模型大小和参数,python-2.7,tensorflow,neural-network,deep-learning,conv-neural-network,Python 2.7,Tensorflow,Neural Network,Deep Learning,Conv Neural Network,根据Andrej的博客- 他说,对于卷积层,在参数共享的情况下,它引入了每个滤波器的fxfd权重,总共(fxfd)xk权重和K偏差 在我的tensorflow代码中,我有这样一个体系结构(其中D=1) conv1:F=3,K=32,S=1,p=1 池1: conv2 等等 根据公式, 为conv1生成的F=3的模型应具有9K权重,即较小的模型,以及 F=5生成的模型应具有25K权重,即更大的模型 问题 在我的代码中,当我写出这两种情况下的模型文件时,我看到.ckpt文件大约是380MB(F=3

根据Andrej的博客-

他说,对于卷积层,在参数共享的情况下,它引入了每个滤波器的
fxfd
权重,总共
(fxfd)xk
权重和
K
偏差

在我的tensorflow代码中,我有这样一个体系结构(其中D=1)

  • conv1:F=3,K=32,S=1,p=1

  • 池1:

  • conv2 等等

  • 根据公式,

  • 为conv1生成的F=3的模型应具有9K权重,即较小的模型,以及

  • F=5生成的模型应具有25K权重,即更大的模型

  • 问题 在我的代码中,当我写出这两种情况下的模型文件时,我看到
    .ckpt
    文件大约是380MB(F=3)和340MB(F=5)。我错过什么了吗

    代码: 下面是将变量保存到模型并打印其大小的参考代码

        ''' Run the session and save the model'''
    
    #Add a saver here
    saver = tf.train.Saver()
    
    # Run session 
    sess.run(tf.initialize_all_variables())
    for i in range(201):
      batch = mnist.train.next_batch(50)
      if i%100 == 0:
        train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0})
        print("step %d, training accuracy %g"%(i, train_accuracy))
      train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
    
    # Save model 
    save_path = saver.save(sess, "/Users/voladoddi/Desktop/dropmodel.ckpt")
    print("Model saved in file: %s" % save_path)
    
    # Test 
    print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
    
    
    # Print model size. 
    vars = 0
    for v in tf.all_variables():
        vars += np.prod(v.get_shape().as_list())
    print(vars*4)/(1024**2),"MB"
    

    这些计算仅适用于卷积层,如果您的模型有一些完全连接的层,则较大的过滤器大小可能会产生较小的特征映射,减少FC层中的参数数量,并且根据具体的模型配置,这可能会导致参数数量减少。Hi@MatiasValdenegro,我猜根据这个链接-,我把“模型尺寸”和“参数数量”这两个词混在一起了。你的意思是说#parameters=/=模型大小。这是正确的吗?不,我说的是完全不同的东西。打印所有变量的名称和大小可以帮助您了解这里发生了什么(调试它比检查模型大小更容易)