Tensorflow:如何在张量中修改值
numpy
python
tensorflow
17
0

由于我需要在使用Tensorflow训练模型之前为数据编写一些预处理程序,因此需要对tensor一些修改。但是,我不知道如何像使用numpy那样修改tensor的值。

最好的方法是能够直接修改tensor 。但是,在当前版本的Tensorflow中似乎不可能。另一种方法是将进程的tensor更改为ndarray ,然后使用tf.convert_to_tensor进行更改。

关键是如何将tensor更改为ndarray
1) tf.contrib.util.make_ndarray(tensor)https : tf.contrib.util.make_ndarray(tensor)
根据文档,这似乎是最简单的方法,但是我在当前版本的Tensorflow中找不到此功能。其次,它的输入是TensorProto而不是tensor
2)使用a.eval()a复制到另一个ndarray
但是,它仅在笔记本中使用tf.InteractiveSession()时有效。

下面是一个带有代码的简单案例。此代码的目的是使tfc在该过程之后具有与npc相同的输出。

暗示
您应该将tfcnpc视为彼此独立。这满足了首先使用tf.placeholder()检索到的训练数据为tensor格式的情况。


源代码

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]

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

使用assign和eval(或sess.run)分配:

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]]
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题