具有不可追踪层的张量流



我正在查看此错误。我正在使模型的某个部分无法访问,我在.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', ..

您的模型没有使用任何损失或优化器进行编译。您必须定义要使用的损失和优化器,并将它们传递给编译。类似于:

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

最新更新