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

查看:858
本文介绍了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(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.

提示
您应该将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:\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屋!

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