所以,我有一个像图像这样的模型在这里,它连接了来自层 dense_12
和 dense_10
(图中未显示)的值我想知道是否可以设置与左箭头相关的权重是可训练的,而右边的则是不可训练的,反之亦然。现在,我可以只设置 dense_13.trainable = False
但这也会阻止它训练与dense_12 相关的权重。如果无法做到这一点,那么我可以为张量中的每个变量设置 trainable
特征吗?或者有其他解决办法吗?
编辑: 我找到了一个粗略的解决方案,即像这样创建一个自定义学习循环:
for epoch in range(num_epochs):
print(f"\nStart of Training Epoch {epoch+1}")
for batch_idx, (x_batch, y_batch) in enumerate(ds_train):
print(f"\n\t\tBatch no {batch_idx}")
with tf.GradientTape() as tape:
y_pred = model(x_batch, training=True)
loss = loss_fn(y_batch, y_pred)
gradients = tape.gradient(loss, model.trainable_weights)
modify_gradients(gradients)
optimizer.apply_gradients(gradients)
如您所见,我正在修改梯度,以将我不想训练的权重的梯度设置为零。这有效,但效率非常低,因为无论如何都要计算梯度。不过我很确定有更好的解决方案