Tensorflow:如何在张量中修改值 [英] Tensorflow: How to modify the value in tensor
问题描述
由于在使用Tensorflow训练模型之前需要为数据编写一些预处理程序,因此需要对tensor
进行一些修改.但是,我不知道如何像使用numpy
那样修改tensor
中的值.
Since I need to write some preprocesses for the data before using Tensorflow to train models, some modifications on the tensor
is needed. However, I have no idea about how to modify the values in tensor
like the way using numpy
.
这样做的最好方法是它能够直接修改tensor
.但是,在当前版本的Tensorflow中似乎不可能.另一种方法是将进程的tensor
更改为ndarray
,然后使用tf.convert_to_tensor
进行更改.
The best way of doing so is that it is able to modify tensor
directly. Yet, it seems not possible in the current version of Tensorflow. An alternative way is changing tensor
to ndarray
for the process, and then use tf.convert_to_tensor
to change back.
关键是如何将tensor
更改为ndarray
.
1)tf.contrib.util.make_ndarray(tensor)
:
https://www.tensorflow.org/versions /r0.8/api_docs/python/contrib.util.html#make_ndarray
从文档来看,这似乎是最简单的方法,但是我无法在当前版本的Tensorflow中找到此功能.其次,它的输入是TensorProto
而不是tensor
.
2)使用a.eval()
将a
复制到另一个ndarray
但是,它仅在笔记本中使用tf.InteractiveSession()
时有效.
The key is how to change tensor
to ndarray
.
1) tf.contrib.util.make_ndarray(tensor)
:
https://www.tensorflow.org/versions/r0.8/api_docs/python/contrib.util.html#make_ndarray
It seems the easiest way as per the document, yet I cannot find this function in the current version of the Tensorflow. Second, the input of it is TensorProto
rather than tensor
.
2) Use a.eval()
to copy a
to another ndarray
Yet, it works only at using tf.InteractiveSession()
in notebook.
一个带有代码的简单案例如下所示.该代码的目的是使tfc
在该过程之后具有与npc
相同的输出.
A simple case with codes shows below. The purpose of this code is making that the tfc
has the same output as npc
after the process.
提示
您应该将tfc
和npc
彼此独立对待.这满足了这样的情况,即最初检索到的训练数据为tensor
格式,并且 tf.placeholder()
.
HINT
You should treat that tfc
and npc
are independent to each other. This meets the situation that at first the retrieved training data is in tensor
format with tf.placeholder()
.
源代码
import numpy as np
import tensorflow as tf
tf.InteractiveSession()
tfc = tf.constant([[1.,2.],[3.,4.]])
npc = np.array([[1.,2.],[3.,4.]])
row = np.array([[.1,.2]])
print('tfc:\n', tfc.eval())
print('npc:\n', npc)
for i in range(2):
for j in range(2):
npc[i,j] += row[0,j]
print('modified tfc:\n', tfc.eval())
print('modified npc:\n', npc)
输出:
tfc:
[[1. 2.]
[3. 4.]]
npc:
[[1. 2.]
[3. 4.]]
修改后的tfc:
[[1. 2.]
[3. 4.]]
修改后的npc:
[[1.1 2.2]
[3.1 4.2]]
tfc:
[[ 1. 2.]
[ 3. 4.]]
npc:
[[ 1. 2.]
[ 3. 4.]]
modified tfc:
[[ 1. 2.]
[ 3. 4.]]
modified npc:
[[ 1.1 2.2]
[ 3.1 4.2]]
推荐答案
使用分配并评估(或sess.run)分配:
Use assign and eval (or sess.run) the assign:
import numpy as np
import tensorflow as tf
npc = np.array([[1.,2.],[3.,4.]])
tfc = tf.Variable(npc) # Use variable
row = np.array([[.1,.2]])
with tf.Session() as sess:
tf.initialize_all_variables().run() # need to initialize all variables
print('tfc:\n', tfc.eval())
print('npc:\n', npc)
for i in range(2):
for j in range(2):
npc[i,j] += row[0,j]
tfc.assign(npc).eval() # assign_sub/assign_add is also available.
print('modified tfc:\n', tfc.eval())
print('modified npc:\n', npc)
它输出:
tfc:
[[ 1. 2.]
[ 3. 4.]]
npc:
[[ 1. 2.]
[ 3. 4.]]
modified tfc:
[[ 1.1 2.2]
[ 3.1 4.2]]
modified npc:
[[ 1.1 2.2]
[ 3.1 4.2]]
这篇关于Tensorflow:如何在张量中修改值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!