由于在使用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.]]
npc:
[[ 1. 2.]
[ 3. 4.]]
修改后的tfc:
[[ 1. 2.]
[ 3. 4.]]
修改后的npc:
[[ 1.1 2.2]
[ 3.1 4.2]]
tfc
和npc
在开始时具有相同的值,以便您可以先处理npc
,然后将其分配给tfc
以获得相同的输出。然而实际情况并非如此。在实际情况中,您只拥有tfc
这些数据,因此需要在开始时将npc
视为不存在。因此关键在于如何处理tfc
中的数据。 - user3030046