我想用Python写一个Op.本教程仅解释如何使用Python包装器在c ++中执行此操作. https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html#adding-a-new-op
我怎样才能在Python中完全编写它?
我想在python中编写TensorFlow操作,但我希望它是可微分的(能够计算渐变).
这个问题询问如何在python中编写一个op,答案建议使用py_func(没有渐变):Tensorflow:用Python编写一个Op
TF文档描述了如何仅从C++代码添加操作:https://www.tensorflow.org/versions/r0.10/how_tos/adding_an_op/index.html
在我的情况下,我正在进行原型设计,所以我不关心它是否在GPU上运行,我不关心它是否可以从TF python API以外的任何东西使用.
这是一个非常简单的问题,我似乎无法弄清楚.我正在使用一个形状的输出张量[100,250].我希望能够在百位的任何位置访问250维数组并单独修改它们.我发现的tensorflow数学工具要么对整个张量进行元素修改或标量修改.但是,我试图对张量的子集进行标量修改.
编辑:
这是我想用tensorflow方法重新创建的numpy代码:
update = sess.run(y, feed_dict={x: batch_xs})
for i in range(len(update)):
update[i] = update[i]/np.sqrt(np.sum(np.square(update[i])))
update[i] = update[i] * magnitude
Run Code Online (Sandbox Code Playgroud)
这个for循环遵循250-D而不是3-D的公式
.然后,我将每个单位向量乘以幅度,将其重新塑造成我想要的长度.
所以这里更新是numpy [100,250]维输出.我想将每个250维向量转换为其单位向量.这样我就可以将其长度改为我选择的幅度.使用这个numpy代码,如果我运行我的train_step并将update传递给我的一个占位符
sess.run(train_step, feed_dict={x: batch_xs, prediction: output})
Run Code Online (Sandbox Code Playgroud)
它返回错误:
No gradients provided for any variable
Run Code Online (Sandbox Code Playgroud)
这是因为我在numpy中完成了数学运算并将其移植回tensorflow. 这是一个相关的stackoverflow问题,没有得到解答.
该tf.nn.l2_normalize非常接近我所期待的,但是它也把通过的平方根的最大平方和.而我试图将每个向量除以它自己的平方和.
谢谢!