【问题标题】:tensor flow with untrainable layer具有可训练层的张量流
【发布时间】:2021-06-28 05:23:04
【问题描述】:

我正在查看此错误。我正在使模型的一部分无法训练,我在 .fit 中遇到错误。 想冻结模型的开始只交易头部。顶部是模型,底部是.fit

def snakeEyes():
       K = 100
       i       = tf.keras.layers.Input(shape=(7,11,17), name="matrix") 
   
   x1 = tf.keras.layers.Conv2D(K, 2,activation="relu",padding ="same")(i)
   x1 = tf.keras.layers.Conv2D(K, 2,activation="relu")(x1)
   x1 = tf.keras.layers.MaxPooling2D ()(x1)
   x1 = tf.keras.layers.Conv2D(K, 2,activation="relu",padding ="same")(x1)
   x1 = tf.keras.layers.Conv2D(K, 2,activation="relu")(x1)
   x1 = tf.keras.layers.MaxPooling2D ()(x1)
   x1 = tf.keras.layers.Flatten()(x1)
   
   x2 = tf.keras.layers.Conv2D(K, 3,activation="relu",padding ="same")(i)
   x2 = tf.keras.layers.Conv2D(K, 3,activation="relu",padding ="same")(x2)
   x2 = tf.keras.layers.MaxPooling2D ()(x2)
   x2 = tf.keras.layers.Conv2D(K, 3,activation="relu",padding ="same")(x2)
   x2 = tf.keras.layers.Conv2D(K, 3,activation="relu",padding ="same")(x2)
   x2 = tf.keras.layers.MaxPooling2D ()(x2)
   x2 = tf.keras.layers.Flatten()(x2)
   
   x = tf.keras.layers.concatenate([x1,x2])
   
   x = tf.keras.layers.Dense(30,activation="relu")(x)
   logits = tf.keras.layers.Dense(4)(x)
   logits = tf.keras.layers.Softmax()(logits)
   
   
   values    = tf.keras.layers.Dense(64, activation='relu', name="out1")(x)
   values    = tf.keras.layers.Dense(1, activation="linear")(values)
    

   actor = Model(inputs=i, outputs=logits)
   actor.compile()

   critic = Model(inputs=i, outputs=values)
   critic.compile()
    
   policy = Model(inputs=i, outputs=[logits,values])
   policy.compile()
   
   return actor,critic,policy

然后循环:

  for layer in agent1.critic.layers:layer.trainable = True
  for layer in agent1.actor.layers:layer.trainable = False
  
    
  agent1.critic.fit(state_matrices,rewards)
    
  episode_reward = tf.math.reduce_sum(rewards)
  return episode_reward , size

我明白了:

ValueError: No gradients provided for any variable: ['conv2d_104/kernel:0', 'conv2d_104/bias:0', ..

【问题讨论】:

    标签: tensorflow reinforcement-learning unsupervised-learning


    【解决方案1】:

    您的模型未使用任何损失或优化器进行编译。您必须定义要使用的损失和优化器并将它们传递给编译器。比如:

    optimizer = keras.optimizers.Adam(lr=learning_rate)
    loss_fn = keras.losses.mean_squared_error()
    
    actor.compile(optimizer=optimizer,
                  loss=loss_fn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多