title: Tensorflow, How can I restore model when some new layers are added?
body: <p>I have trained a model and save the checkpoints. The code of my model is:</p>
  
  <pre class="lang-py prettyprint-override"><code>with tf.variable_scope(scope):
      self.inputs = tf.placeholder(shape=[None, 80, 80, 1], dtype=tf.float32)
      self.conv_1 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.inputs, num_outputs=32,
                                kernel_size=[8, 8], stride=4, padding='SAME')
      self.conv_2 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.conv_1, num_outputs=64,
                                kernel_size=[4, 4], stride=2, padding='SAME')
      self.conv_3 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.conv_2, num_outputs=64,
                                kernel_size=[3, 3], stride=1, padding='SAME')
      self.fc = slim.fully_connected(slim.flatten(self.conv_3), 512, activation_fn=tf.nn.elu)
  
      # Output layers for policy and value estimations
      self.policy = slim.fully_connected(self.fc,
                                         cfg.ACTION_DIM,
                                         activation_fn=tf.nn.softmax,
                                         biases_initializer=None)
      self.value = slim.fully_connected(self.fc,
                                        1,
                                        activation_fn=None,
                                        biases_initializer=None)
  </code></pre>
  
  <p>There are about 32 processes running simultaneously and each has a copy of the global network defined in the above code, the <code>scope</code> is the id of each process. The <code>scope</code> of global network is <code>global</code>.</p>
  
  <p>And after that, I want to add more layers after <code>self.fc</code> layer.</p>
  
  <pre class="lang-py prettyprint-override"><code>with tf.variable_scope(scope):
      self.inputs = tf.placeholder(shape=[None, 80, 80, 1], dtype=tf.float32)
      self.conv_1 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.inputs, num_outputs=32,
                                kernel_size=[8, 8], stride=4, padding='SAME')
      self.conv_2 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.conv_1, num_outputs=64,
                                kernel_size=[4, 4], stride=2, padding='SAME')
      self.conv_3 = slim.conv2d(activation_fn=tf.nn.relu, inputs=self.conv_2, num_outputs=64,
                                kernel_size=[3, 3], stride=1, padding='SAME')
      self.fc = slim.fully_connected(slim.flatten(self.conv_3), 512, activation_fn=tf.nn.elu)
  
      # Output layers for policy and value estimations
      self.policy = slim.fully_connected(self.fc,
                                         cfg.ACTION_DIM,
                                         activation_fn=tf.nn.softmax,
                                         biases_initializer=None)
      self.value = slim.fully_connected(self.fc,
                                        1,
                                        activation_fn=None,
                                        biases_initializer=None)
  
      self.new_fc_1 = slim.fully_connected(self.fc, 512, activation_fn=tf.nn.elu)
  </code></pre>
  
  <p>However, when I restore the model, it reported the following error:</p>
  
  <pre><code>2017-08-03 22:23:43.473157: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
  2017-08-03 22:23:43.477197: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 379803423 vs. calculated on the restored bytes 2648422677
  2017-08-03 22:23:43.477210: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 3963326522 vs. calculated on the restored bytes 3154501583
  2017-08-03 22:23:43.477200: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 3893236466 vs. calculated on the restored bytes 1767411214
  2017-08-03 22:23:43.478276: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 4239176201 vs. calculated on the restored bytes 3213118706
  2017-08-03 22:23:43.480438: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 442335910 vs. calculated on the restored bytes 4248164641
  2017-08-03 22:23:43.483885: W tensorflow/core/framework/op_kernel.cc:1158] Data loss: Checksum does not match: stored 3105262865 vs. calculated on the restored bytes 2648422677
  2017-08-03 22:23:43.483953: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  2017-08-03 22:23:43.486987: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  2017-08-03 22:23:43.490616: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  2017-08-03 22:23:43.491951: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  2017-08-03 22:23:43.491957: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  2017-08-03 22:23:43.494310: W tensorflow/core/framework/op_kernel.cc:1158] Not found: Key worker_15/fully_connected_3/weights not found in checkpoint
       [[Node: save/RestoreV2_128 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_128/tensor_names, save/RestoreV2_128/shape_and_slices)]]
  .... ....
  </code></pre>
  
  <p>I used the following code to save model</p>
  
  <pre class="lang-py prettyprint-override"><code>saver.save(sess, self.model_path+'/model-'+str(episode_count)+'.ckpt')
  </code></pre>
  
  <p>And here is the code to define saver</p>
  
  <pre class="lang-py prettyprint-override"><code>value_list = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='global/old_scope')
  value_list.extend(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='global/actor_critic'))
  saver = tf.train.Saver(value_list, max_to_keep=100)
  
  with tf.Session(config=tf_configs) as sess:
      coord = tf.train.Coordinator()
      if load_model:
          print('Loading Model...')
          ckpt = tf.train.get_checkpoint_state(model_path)
          saver.restore(sess, ckpt.model_checkpoint_path)
      else:
          sess.run(tf.global_variables_initializer())
  </code></pre>
  
  <p>How can I restore a pre-trained model when some new layers with random initialized parameters are added to the current neural network?</p>