【问题标题】:Transfer Learning - How can I change only the output layer in TensorFlow?迁移学习 - 如何仅更改 TensorFlow 中的输出层?
【发布时间】:2020-08-31 10:39:27
【问题描述】:

我正在尝试应用 Rusu 等人提出的一个想法。在https://arxiv.org/pdf/1511.06295.pdf 中,它包括训练一个根据输入类别改变输出层的NN,即,如果我们知道输入的id,我们将选择相应的输出层。这样,所有隐藏层都将使用所有数据进行训练,但每个输出层将仅使用其相应类型的输入数据进行训练。

这是为了在迁移学习框架中取得良好的效果。

如何在 tensorflow 2.0 中实现这种“改变最后一层”?

【问题讨论】:

    标签: python tensorflow2.0 reinforcement-learning transfer-learning


    【解决方案1】:

    如果你使用model subclassing,你实际上可以定义你的前向传球。

    class MyModel(tf.keras.Model):
    
        def __init__(self):
            super(Model, self).__init__()
            self.block_1 = BlockA()
            self.block_2 = BlockB()
            self.global_pool = layers.GlobalAveragePooling2D()
            self.classifier = Dense(num_classes)
    
        def call(self, inputs):
            if condition:
                x = self.block_1(inputs)
            else:
                x = self.block_2(inputs)
            x = self.global_pool(x)
            return self.classifier(x)
    

    您仍然需要弄清楚反向传播部分,但我认为如果您使用多输出模型并同时训练所有“最后一层”,这将相当容易。

    【讨论】:

    • 我一开始想到的方法和那个类似,但是后来我在backprop部分遇到了问题。 “同时”训练最后一层是什么意思?我的意思是,我只想训练与使用的输入类型相对应的最后一层......
    • 用多个输入和输出训练你的模型。例如,如果您训练一个数字和一个狗/猫分类器,您将同时输入来自数字数据集的一批和来自狗/猫数据集的另一批。您将有两个 one-hot 向量作为输出。
    • 我不太了解多输入的概念......这意味着我的隐藏层(至少是第一个)也必须改变大小,对吧?我真正想要的是保留隐藏层的结构并调用它,然后是对应于输入类的输出层。
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多