将连接层中的单个权重设置为不可训练

时间:2021-04-15 19:46:03

标签: tensorflow keras deep-learning

所以,我有一个像图像这样的模型在这里,它连接了来自层 dense_12dense_10(图中未显示)的值我想知道是否可以设置与左箭头相关的权重是可训练的,而右边的则是不可训练的,反之亦然。现在,我可以只设置 dense_13.trainable = False 但这也会阻止它训练与dense_12 相关的权重。如果无法做到这一点,那么我可以为张量中的每个变量设置 trainable 特征吗?或者有其他解决办法吗?
Image of the Model

编辑: 我找到了一个粗略的解决方案,即像这样创建一个自定义学习循环:

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)

如您所见,我正在修改梯度,以将我不想训练的权重的梯度设置为零。这有效,但效率非常低,因为无论如何都要计算梯度。不过我很确定有更好的解决方案

0 个答案:

没有答案
相关问题