Tensorflow:如何修改张量中的值 [英] Tensorflow: How to modify the value in tensor

查看:120
本文介绍了Tensorflow:如何修改张量中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于在使用 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.

提示
你应该认为 tfcnpc 是相互独立的.这满足了首先检索到的训练数据是 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:如何修改张量中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆