2016-09-28 10 views
2

私は、TensorFlowにシンプルな4層ニューラルネットワーク(2つの隠れたレイヤー)を構築しました。私はTensorFlowによって提供された組み込みのNNを使用していませんが、私自身の基本バージョンを実装しています。 W(重み)とB(偏見)テンソルの一箇所に、私はこのように、これらの変数の辞書を構築し維持するために今、:Saverオブジェクトを使ってTensorFlowに変数の辞書を保存する方法は?

weights = { 
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes])) 
} 
biases = { 
    'b1': tf.Variable(tf.random_normal([n_hidden_1])), 
    'b2': tf.Variable(tf.random_normal([n_hidden_2])), 
    'out': tf.Variable(tf.random_normal([n_classes])) 
} 

を、私はこれらのパラメータを学習した後、私はセーバーオブジェクトを使用してそれらを保存したいです。私はこれを試みた:

saver = tf.train.Saver([weights,biases]) 
save_path = saver.save(sess,"./data/model.ckpt") 

しかし、私はそうしていません。

TypeError: unhashable type: 'dict' 

今、一つの解決策は、すべての変数分離することです:見誤差がある個々の変数にbias_out(偏見辞書のうち)H1、H2、アウト、B1、B2を、そしてそれらを保存するが、これはそうです素朴なアプローチ。後で一緒にクラブ化する必要のある変数が増えたら、それをそのままにしておくともっとクリーンで扱いやすくなります。グループ化された変数を一緒に保存するにはどうすればよいですか?

答えて

2

Tensorflow Saverはdictのリストを受け付けません。たぶん、あなたはmerge your dictionaries firstに試してみてください:

parameters = weights.copy() 
parameters.update(bias) 
(Pythonの3.5で)

または

parameters = {**weights,**bias} 

その後:

saver = tf.train.Saver(parameters) 
save_path = saver.save(sess,"./data/model.ckpt") 

他のソリューション:

saver = tf.train.Saver({name:variable for name,variable in weights.items()+bias.items()}) 
save_path = saver.save(sess,"./data/model.ckpt") 

最後の解決策にはいくつかの問題がありますレムは、ウェイトとバイアスの両方のキーとして "出る"のように、1つの "アウト"変数だけが保存されるようです。

+0

これは私がそれを検証した方法です: 'python inspect_checkpoint.py --file_name = "path/to/model/file"'を使用してください。出力は次のようになります。 (type_of_var1)[shape] 例: h1(DT_FLOAT)[784,256] – arshellium

+0

最後に私はこの構文を使用しましたが、これは正しいものです。 saver = tf.train.Saver({**体重、**バイアス) ありがとう@corentin – arshellium

関連する問題