2017-10-25 8 views
1

私はDCGAN codeで作業しています。私はこのニューラルネットの出力を取り、それを分析し、それに対してペナルティを発行する関数を加えることによって、ニューラルネットの1つに与えられるthe rewardを修正する必要があります。だから私の損失関数は次のようになります。神経網に値を割り当てる前にTensorFlow Tensorをnumpyに変換してください

self.g_loss = self.g_loss + self.penalty 

問題は

  • このペナルティ関数のみ

  • 、(私はこれを修正する方法はありません)を入力としてnumpyの配列を取るですニューラルネットワークの出力は、tf.tensor、

  • であり、まだニューロネットに割り当てられていない(技術的にはまだ構築されていない)ため、どちらも実行できません.eval()またはsess.run()

この場合、テンソルフローテンソルをnumpy配列に変換するにはどうすればよいですか?

+0

ニューラルネットワークのトレーニングが必要な場合は、ペナルティのグラデーションも用意する必要があります。もしあなたがそれを持っていれば、あなたはおそらくこれを世話するためにテンソルフローにカスタム演算を追加する必要があります。 – gdelab

答えて

2

テンソルフローtf.py_funcwrapping Python functions and passing tensors to themです。ただし、この損失関数を使用してネットワークをトレーニングすることはできません。これは、Tensorflowがnumpyコードを自動的に区別しないためです。

あなたにとって幸運にも、autograd does automatically differentiate numpy codeです。それを使用すると、別のtf.pyfuncコールでは、グラデーションが得られます。次に、put back into the tensorflow graph on the backward passになります。

ここでは、this gistですべての操作を行う方法の例を示します。

+0

あなたの返事をありがとう。現在私は 'g_optim = tf.train.AdamOptimizer(config.learning_rate、beta1 = config.beta1)\ .minimize(self.g_loss、var_list = self.g_vars)'を私のオプティマイザとして使用しています。どのように私はすべての(または少なくとも私の損失の一部)のためにそれを保つだろうか? – Massyanya

+0

また、tf-autograd.pyを実行すると、次のエラーがスローされます: 'InvalidArgumentError(トレースバックについては上記参照):pyfunc_1によって返される0番目の値はdoubleですが、floatを期待します。 \t [[Node:PyFunc_1 = PyFunc [Tin = [DT_DOUBLE ]、Tout = [DT_FLOAT]、トークン= "pyfunc_1"、_device = "/ジョブ:ローカルホスト/レプリカ:0 /タスク:0/cpu:0"](変数/読み取り/ _3)]] ' – Massyanya

+0

gpuでこれを実行していますか?その場合、Tensorflowはデフォルトでfloat32になりますが、numpyはデフォルトのfloat64になります。 –

関連する問題