【问题标题】:Adding new nodes to output layer in Keras在 Keras 中向输出层添加新节点
【发布时间】:2017-10-06 17:11:44
【问题描述】:

我想在输出层添加新节点以便稍后训练它,我正在做:

def add_outputs(self, n_new_outputs):
    out = self.model.get_layer('fc8').output
    last_layer = self.model.get_layer('fc7').output
    out2 = Dense(n_new_outputs, activation='softmax', name='fc9')(last_layer)
    output = merge([out, out2], mode='concat')
    self.model = Model(input=self.model.input, output=output)

其中'fc7'是输出层'fc8'之前的全连接层。我希望只有最后一层带有out = self.model.get_layer('fc8').output,但输出是所有模型。 有没有办法只从网络中获取一层? 也许还有其他更简单的方法来做到这一点......

谢谢!!!!

【问题讨论】:

    标签: python-3.x neural-network deep-learning keras keras-layer


    【解决方案1】:

    终于找到了解决办法:

    1) 从最后一层获取权重

    2) 将零添加到权重并随机初始化它的连接

    3) 弹出输出层并新建一个

    4) 为新层设置新的权重

    这里是代码:

     def add_outputs(self, n_new_outputs):
            #Increment the number of outputs
            self.n_outputs += n_new_outputs
            weights = self.model.get_layer('fc8').get_weights()
            #Adding new weights, weights will be 0 and the connections random
            shape = weights[0].shape[0]
            weights[1] = np.concatenate((weights[1], np.zeros(n_new_outputs)), axis=0)
            weights[0] = np.concatenate((weights[0], -0.0001 * np.random.random_sample((shape, n_new_outputs)) + 0.0001), axis=1)
            #Deleting the old output layer
            self.model.layers.pop()
            last_layer = self.model.get_layer('batchnormalization_1').output
            #New output layer
            out = Dense(self.n_outputs, activation='softmax', name='fc8')(last_layer)
            self.model = Model(input=self.model.input, output=out)
            #set weights to the layer
            self.model.get_layer('fc8').set_weights(weights)
            print(weights[0])
    

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2018-06-20
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多