【发布时间】:2016-09-01 11:48:47
【问题描述】:
由于我需要在使用 Tensorflow 训练模型之前为数据编写一些预处理程序,因此需要对 tensor 进行一些修改。但是,我不知道如何像使用numpy 那样修改tensor 中的值。
最好的办法是直接修改tensor。然而,在当前版本的 Tensorflow 中似乎是不可能的。另一种方法是将进程的tensor 更改为ndarray,然后使用tf.convert_to_tensor 更改回来。
关键是如何将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()。
下面是一个带有代码的简单案例。此代码的目的是使tfc 在处理后具有与npc 相同的输出。
提示
您应该认为tfc 和npc 是相互独立的。这满足了最初检索到的训练数据为tensor格式和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.]]
全国人大:
[[ 1. 2.]
[ 3. 4.]]
修改过的 tfc:
[[ 1. 2.]
[ 3. 4.]]
修改后的NPC:
[[ 1.1 2.2]
[3.1 4.2]]
【问题讨论】:
标签: python numpy tensorflow