タイトルがあまりにも特定的かもしれないし、これは他のコスト関数にも当てはまるかもしれません。基本的に私は(私の場合、私は非常に異なるアーキテクチャを持っていますが、問題は常に複製されます)以下のようにダミーのセットアップを持っている:Keras binary_crossentropyコスト関数大規模ネットワークでシステマティックエラー
hidden_units=10000
l2_sparsity = 5e-7
l1_sparsity = 1e-8
mod=Sequential([Dense(hidden_units, input_shape = (1000,), activation="relu", kernel_regularizer=l1_l2(l1=l1_sparsity, l2=l2_sparsity),
),
Dense(hidden_units, activation="relu", kernel_regularizer=l1_l2(l1=l1_sparsity, l2=l2_sparsity),
),
Dense(1000, activation="sigmoid",
)
])
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0)
mod.compile(loss='binary_crossentropy', optimizer=adam, metrics=['binary_accuracy'])
x = np.array([np.array([random.random() for i in range(1000)], dtype=np.float64) for i in range(10)])
classes = (x + 0.5).astype(np.uint32)
def replica_cross_entropy_loss(predictions, truth):
eps=10e-8
predictions = np.clip(predictions, eps, 1.0-eps)
x = np.log(1.0 *predictions/(1.0 - predictions))
return np.mean(np.clip(x, 0, None) - x * truth + np.log(1 + np.exp(-abs(x))))
mod.fit(x[:2],classes[:2], batch_size=128, epochs=1)
preds = mod.predict(x[:2])
print replica_cross_entropy_loss(preds,classes[:2])
print mod.test_on_batch(x[:2],classes[:2])[0]
print 100*(mod.test_on_batch(x[:2],classes[:2])[0]/
replica_cross_entropy_loss(preds,classes[:2]) - 1)
私がここでやっている何を(に内蔵のkeras損失を比較しています私は信じている)numpyを使用して忠実な再建。ここで概説したmlpアーキテクチャの隠れユニットを実験すると、興味深い結果が得られます。具体的には:
kerasコスト関数は 隠れ層のニューロンの数に関連する差で、numpyの 等価より系統的に高いです。実例として
、ここkerasコスト関数のPCTの過大評価対このMLPの隠れ層のニューロンの数をプロットする簡単なグラフである:
私が言うべきこれはバックエンドに依存しないと思われ、theanoとtensorflowの両方に影響します。
この動作から判断すると、精度の問題があるようです。これを緩和する方法があるかどうか分かりますか?私の実際のモデルはコスト関数がnumpyの回答と一貫して5-10%異なります
'x = mod.predict(x [:2])'という行は間違いだと思います。それは比較を基本的に無意味にし、結論はまったく意味がありません。 –
ケルナ損失関数とそれに相当するnumpyの関数を比較するネットワークは必要ありません。単に 'replica_cross_entropy_loss(a、b)'と 'K.eval(K.mean(K.binary_crossentropy(K.variable(a)、K.variable(b))))' 'の出力を' a、bあなたは答えを見つけるでしょう。 –
より合理的なテストに編集され、私はまだ同じ動作を見つけます – user3684792