我可以手动将输入神经元插入Keras中的隐藏层吗?

2024-04-19 18:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CNN,我想把一些额外的信息偷偷地放进最后一层

下面是代码的简化版本。留意评论

def define_model():
    model = Sequential()
    model.add(Conv2D(32, (3,3))
    model.add(Conv2D(32, (3,3))
    model.add(MaxPooling2D((2,2))
    model.add(Conv2D(64, (3,3))
    model.add(Conv2D(64, (3,3))
    model.add(MaxPooling2D((2,2)))
    model.add(Flatten())
    # this next layer is where I want to sneak the neuron(s) in
    model.add(Dense(1024))
    model.add(Dropout(rate=0.4))
    model.add(Dense(168))
    model.compile()
    return model

因此,我有一些关于输入图像的附加信息,这些信息可能有助于网络。把它看作是一条线索,可能值得也可能不值得给予合理的权重

线索是一个整数的形式,从技术上讲,它在[0,inf]中,但实际上可能在[0,20]中

所以我的问题是

  1. 从NN体系结构的角度来看,用什么方式来表示该提示是合适的。

  2. 我如何调整Keras模型使其在实践中实现?

  3. 奖励:如果我愿意,我能阻止后来的辍学者放弃这一新增功能吗?


Tags: 代码版本add信息modeldef评论cnn
1条回答
网友
1楼 · 发布于 2024-04-19 18:22:37

这可以通过使用Keras的功能API来实现:

def define_model():
    inputs = Input(input_shape=(...))
    hints = Input(input_shape=(...))

    x = Conv2D(32, (3,3))(inputs)
    x = Conv2D(32, (3,3))(x)
    x = MaxPooling2D((2,2))(x)
    x = Conv2D(64, (3,3))(x)
    x = Conv2D(64, (3,3))(x)
    x = MaxPooling2D((2,2))(x)
    x = Flatten()(x)

    x = Add()([x, hints])

    x = Dense(1024)(x)
    x = Dropout(rate=0.4)(x)
    outputs = Dense(168)(x)

    model = Model([inputs, hints], outputs)

    model.compile()
    return model

我不知道如何使用Keras保护它不受辍学者的影响

相关问题 更多 >