Python 将TensorFlow张量转换为numpy,然后再将值赋给神经网络

Python 将TensorFlow张量转换为numpy,然后再将值赋给神经网络,python,numpy,tensorflow,Python,Numpy,Tensorflow,我在和一家公司合作。我需要通过添加一个函数来修改其中一个神经网络,该函数将获取该神经网络的输出,对其进行分析,并对其进行惩罚。所以我的损失函数看起来像: self.g_loss = self.g_loss + self.penalty 问题是 这个惩罚函数只将numpy数组作为输入(我没有办法修改它) 神经网络输出是一个tf张量 由于这些值还没有分配给神经网络(技术上它还没有建立),我既不能运行.eval()也不能运行sess.run() 那么,在这种情况下,如何将tensorflow张量

我在和一家公司合作。我需要通过添加一个函数来修改其中一个神经网络,该函数将获取该神经网络的输出,对其进行分析,并对其进行惩罚。所以我的损失函数看起来像:

self.g_loss = self.g_loss + self.penalty
问题是

  • 这个惩罚函数只将numpy数组作为输入(我没有办法修改它)

  • 神经网络输出是一个tf张量

  • 由于这些值还没有分配给神经网络(技术上它还没有建立),我既不能运行
    .eval()
    也不能运行
    sess.run()


那么,在这种情况下,如何将tensorflow张量转换为numpy数组呢?

tensorflow具有
tf.py\u func
for。但是,您不能使用此损失函数来训练网络,因为Tensorflow不会自动区分numpy代码

你真幸运。如果您使用它,那么在另一个
tf.pyfunc
调用中,您可以得到渐变,然后您可以使用渐变


下面是一个例子,说明如何在中完成这一切。

如果你希望训练你的神经网络,你还需要为你的惩罚提供一个梯度。如果你有它,你可能需要添加一个自定义操作到tensorflow来处理这个…谢谢你的回复。目前我正在使用
g\u optim=tf.train.AdamOptimizer(config.learning\u rate,beta1=config.beta1)\.最小化(self.g\u损耗,var\u list=self.g\u vars)
作为我的优化工具。我如何为我的全部(或至少是tf部分)损失保留该值?同时运行tf-autograd.py会抛出以下错误:
InvalidArgumentError(回溯请参见上文):pyfunc_1返回的第0个值是double,但需要float[[Node:pyfunc_1=pyfunc[Tin=[DT_double],Tout=[DT_float],token=“pyfunc_1”,\u设备=“/job:localhost/replica:0/task:0/cpu:0”](变量/read/_3)]]
。您是否在gpu上运行此功能?在这种情况下,Tensorflow默认为float32,而numpy默认为float64。是的,我在gpu上运行,如何解决此差异?我已经更新了要点,以便它能在带有gpu的系统上运行,但我唯一能让它工作的方法是强制执行
float32
cpu
几乎所有设备的使用重新。