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

时间:2017-04-16 23:43:29

标签: python-2.7 tensorflow neural-network deep-learning conv-neural-network

根据Andrej的博客 - enter image description here

他说,对于卷积层,通过参数共享,它会为每个过滤器引入F x F x D个权重,总共(F x F x D) x K个权重和K个偏差。

在我的张量流代码中,我有一个这样的架构(其中D = 1)

  1. conv1:F = 3,K = 32,S = 1,P = 1.

  2. pool1:

  3. CONV2 等等...

  4. 根据公式,

    1. 对于conv1,用F = 3生成的模型应该具有9K权重,即。 较小型号

    2. 使用F = 5生成的模型应具有25K权重,即更大模型

    3. 问题 在我的代码中,当我为这两种情况写出模型文件时,我发现.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"
      

0 个答案:

没有答案