深層ニューラルネットワークでテンソルフローの正規化を正常に使用しています。私はそれを次のようにしています:Tensorflowバッチ正規化はどのように機能しますか?
そして、トレーニングとテストのフェーズの両方でうまく動作します。 しかし、別のプロジェクトで計算されたニューラルネットワークパラメータを使用しようとすると問題が発生します。ここでは、すべての行列乗算と自分で処理する必要があります。ページhttps://www.tensorflow.org/versions/r1.2/api_docs/python/tf/nn/batch_normalizationの式によると
feed_dict = {
self.tf_x: np.array([range(self.x_cnt)])/100,
self.keep_prob: 1,
self.phase_train: False
}
for i in range(len(self.z)):
# print 0 layer's 1 value of arrays
print(self.sess.run([
self.z_prebn[i][0][1], # before bn
self.bn[i][0][1], # mean
self.bn[i][1][1], # var
self.bn[i][2][1], # offset
self.bn[i][3][1], # scale
self.z[i][0][1], # after bn
], feed_dict=feed_dict))
# prints
# [-0.077417567, -0.089603029, 0.000436493, -0.016652612, 1.0055743, 0.30664611]
:問題は、私はtf.nn.batch_normalization
機能の動作を再現することができないということです、
bn = scale * (x - mean)/(sqrt(var) + 1e-3) + offset
しかし、我々が見ることができるよう
1.0055743 * (-0.077417567 - -0.089603029)/(0.000436493^0.5 + 1e-3) + -0.016652612
= 0.543057
値は0.30664611
と異なり、Tensorflow自体によって計算されます。 ここで私は何が間違っているのですか、バッチ正規化値を自分で計算できないのはなぜですか?
ありがとうございます!
はありがとうございました!これらは文書でうまくカバーされていません。 – asmisha