擅长:python、mysql、java
<p>最好让所有操作都由一个层完成,不要像那样减去输出(我不会因为做的事情与文档期望的不同而冒隐藏错误的风险):</p>
<pre><code>from keras.layers import *
def negativeActivation(x):
return -x
left_branch = Sequential()
left_branch.add(Dense(10, input_dim=784))
right_branch = Sequential()
right_branch.add(Dense(10, input_dim=784))
negativeRight = Activation(negativeActivation)(right_branch.output)
diff = Add()([left_branch.output,negativeRight])
model = Model(inputs=[left_branch.input, right_branch.input], outputs=diff)
model.compile(optimizer='rmsprop', loss='binary_crossentropy', loss_weights=[1.])
</code></pre>
<p>当连接这样的模型时,我更喜欢使用<code>Model</code>的方式,使用层,而不是使用<code>Sequential</code>:</p>
^{2}$
<p>这样,您可以创建具有相同层的其他模型,它们将共享相同的权重:</p>
<pre><code>leftModel = Model(leftInput,left_branch)
rightModel = Model(rightInput,right_branch)
fullModel = Model([leftInput,rightInput],diff)
</code></pre>
<p>如果它们共享同一层,训练其中一个会影响其他人。
例如,您可以在编译之前生成<code>left_branch.trainable = False</code>来训练完整模型中正确的部分(或者再次编译以进行训练)。在</p>