クロスエントロピーは、ターゲットベクトルyのすべての要素(1を除く)が0であるため、正しいものではないすべてのアクティベーションのグラデーションを無効にし、プロセスを安定させます。
どちらでき:
- 使用
tanh
活性化([-1、1]の範囲内の出力)とmse
損失:
x = Input(...)
y = Dense(128, activation='relu')(x)
y = Dense(128, activation='relu')(y)
y = Dense(1, activation='tanh')(y)
model = Model(inputs=x, outputs=y)
model.compile(optimizer='adam', loss='mse')
# train model using labels in {-1, 1}
# outputs values are in [-1, 1]
を
- シグモイドを訓練し、あなたのロジットをスケールします。これは、私には、より合理的なようだ:
x = Input(...)
y = Dense(128, activation='relu')(x)
y = Dense(128, activation='relu')(y)
y = Dense(1, activation='sigmoid')(y)
model = Model(inputs=x, outputs=y)
model.compile(optimizer='adam', loss='binary_crossentropy')
# train model using labels in {0, 1}
z = Lambda(lambda _y: _y/2 + .5)(y)
model = Model(inputs=x, outputs=z)
# outputs values are in [-1, 1]
注:あなたが見て、その後、(2枚の画像が同じオブジェクトが含まれている場合などは区別)シャムネットワークと空間に二つのことを区別しようとしている場合コントラスト・ロスの定義はmnist-siamese exampleです。私の経験は、どの出力よりもはるかに優れているということです。sigma
/tanh
出力。