当前位置: 首页 > 面试题库 >

Tensorflow:如何在张量中修改值

怀洛华
2023-03-14
问题内容

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

最好的方法是可以tensor直接修改。但是,在当前版本的Tensorflow中似乎不可能。另一种方法是改变tensorndarray该进程,然后用tf.convert_to_tensor改回来。

关键是如何更改tensorndarray
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]]


问题答案:

使用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]]


 类似资料:
  • 问题内容: 我是TensorFlow的新手。在阅读现有文档时,我发现该术语确实令人困惑。因此,我需要澄清以下问题: 和, vs. ,’张量’vs.之间是什么关系? 它们都是张量类型吗? 问题答案: TensorFlow没有一流的Tensor对象,这意味着在运行时执行的基础图中没有任何概念。相反,该图由相互连接的op节点组成,代表操作。操作分配内存的输出,这些都可以在端点上,等等,你可以认为这些端点

  • 问题内容: 我无法按名称恢复张量,我什至不知道是否可能。 我有一个创建图的函数: 我想在此函数之外访问变量S1_conv1。我试过了: 但这给了我一个错误: ValueError:共享不足:不允许使用变量scale_1 / Scale1_first_relu。您是说要在VarScope中设置“ reuse = None”? 但这有效: 我可以解决这个问题 但我不想那样做。 我认为我的问题是S1_c

  • Tensorflow版本:1.12 Keras版本:2.2.4 OS:Debian Linux(VM实例)Python版本:2.7 我试过:1。用[None,299,299,3]以及[-1,299,299,3]重塑()。两者都不按要求工作 预期结果:

  • 问题内容: 我想在中复制以下代码。例如,我想为所有先前具有值的张量索引分配a 。 如果我在其中编写类似的代码,则会出现以下错误。 方括号中的条件应为。 有没有一种方法可以实现这种“条件赋值”(因为缺少更好的名称)? 问题答案: TensorFlow API中提供了几种比较运算符。 但是,在直接操纵张量时,没有什么等效于简洁的NumPy语法。你必须要使用个人的,和运营商执行相同的操作。 您的NumP

  • 问题内容: 我正在使用和创建神经网络;由于某种原因,我想获得某种内在的张量的值给定的输入,所以我使用的,作为一个。 但是,我发现很难找到张量名称的正确语法,即使知道它的名称也很困难(而且我对操作和张量感到困惑),因此我使用张量板绘制图形并寻找名称。 有没有一种方法可以在不使用张量板的情况下枚举图中的所有张量? 问题答案: 你可以做 另外,如果您要在IPython笔记本中进行原型制作,则可以直接在笔

  • 本文向大家介绍tensorflow从张量中提取一个切片,包括了tensorflow从张量中提取一个切片的使用技巧和注意事项,需要的朋友参考一下 示例 请参阅文档以获取详细信息。tf.slice(input, begin, size) 参数: input:张量 begin:每个维度的起始位置 input size:的每个维度的元素数input,使用-1包括所有剩余元素 块状切片: 使用负索引,检索第