私は、ネットワークパラメータ(ドロップアウト確率、学習率e.d.)を較正するために、異なるパラメータでニューラルネットワークを複数回実行しようとしています。私は、ループ内でネットワークを実行すると、私はまだ同じパラメータを維持しながらネットワークを実行すると、私に別のソリューションを提供し、問題が生じていますが、次のように:TensorFlowで安定した結果を得る方法、ランダムシードを設定する
filename = create_results_file()
for i in range(3):
g = tf.Graph()
with g.as_default():
accuracy_result, average_error = network.train_network(
parameters, inputHeight, inputWidth, inputChannels, outputClasses)
f, w = get_csv_writer(filename)
w.writerow([accuracy_result, "did run %d" % i, average_error])
f.close()
私は開始時に次のコードを使用しています私のネットワークの層と誤差関数を設定する前に、私のtrain_network機能:
np.random.seed(1)
tf.set_random_seed(1)
は、私はまた、TensorFlowグラフを作成する前にこのコードを追加しようとしているが、私は私の結果出力にさまざまなソリューションを取得しておきます。
私はAdamOptimizerを使用しており、tf.truncated_normal
を使用してネットワークウェイトを初期化しています。さらに私はnp.random.permutation
を使用して、各エポックの入力画像をシャッフルします。
)ブロック彼らは内の最初の行の一つであるとして、 train_networkコード。それでも私はあなたの例のようにコードを入れて試してみましたが、私はまだ取得しています不安定な結果: >精度\tラベル\t 2.96916 > 0.9807 \tがRUN1 \t 2.96494 > 0.9804 \tでしRUN2をしたRUN0なかった > 0.9805 \t \tエラー\t 2.95215 – Waanders
私は同じ問題を抱えています。 'tensorflow''' 0.12.1'は指定されたランダムシードを設定します。実行時の確率出力には若干の違いがあります。 – Luke
その理由はあなたの関数が何であるかによって異なりますが、精度計算の小さな違いは、 'tf.reduce_sum()'のようなopsの非決定論的な並列化の減少に起因する可能性が高いです。 (これらの演算子は浮動小数点加算を可換として扱いますが、実際にはそうではありませんが、縮小順序の変更によって結果にわずかなエラーが発生する可能性があります....) – mrry