我正在使用DCGAN code。我需要通过添加一个函数来修改给予其中一个神经网络的the reward,该函数将获取该神经网络的输出,对其进行分析并对其进行惩罚。所以我的损失函数看起来像:
self.g_loss = self.g_loss + self.penalty
问题是
这个惩罚函数只将numpy数组作为输入(我无法修改它),
神经网络输出是一个tf.tensor,
并且由于尚未将值分配给神经网络(从技术上讲,它还没有被构建)我既不能运行.eval()
也不会{{{} 1}}。
那么在这种情况下如何将张量流量张量转换为numpy数组呢?
答案 0 :(得分:2)
Tensorflow wrapping Python functions and passing tensors to them的tf.py_func
为tf.pyfunc
。但是,您不能使用此损失函数来训练网络,因为Tensorflow不会自动区分numpy代码。
幸运的是,autograd does automatically differentiate numpy code。如果你使用它,在另一个#include <sys/user.h>
调用中,你可以得到渐变,然后可以put back into the tensorflow graph on the backward pass。
以下是this gist中如何完成所有操作的示例。