问题描述
由于在使用 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(张量)
: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:
', tfc.eval())
print('npc:
', npc)
for i in range(2):
for j in range(2):
npc[i,j] += row[0,j]
print('modified tfc:
', tfc.eval())
print('modified npc:
', 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]]
推荐答案
使用assign和eval(或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:
', tfc.eval())
print('npc:
', 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:
', tfc.eval())
print('modified npc:
', 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:如何修改张量中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2