python - 张量的访问元素
问题描述
我有以下 TensorFlow 张量。
tensor1 = tf.constant(np.random.randint(0,255, (2,512,512,1)), dtype='int32') #All elements in range [0,255]
tensor2 = tf.constant(np.random.randint(0,255, (2,512,512,1)), dtype='int32') #All elements in range [0,255]
tensor3 = tf.keras.backend.flatten(tensor1)
tensor4 = tf.keras.backend.flatten(tensor2)
tensor5 = tf.constant(np.random.randint(0,255, (255,255)), dtype='int32') #All elements in range [0,255]
我希望使用存储在张量 3 和张量 4 中的值来制作一个元组,并查询张量 5 中元组给定位置的元素。例如,假设张量 3 中的第 0 个元素,即 tensor3[0]=5和张量4 [0] = 99。所以元组变成(5,99)。我希望在张量 5 中查找元素 (5,99) 的值。我希望以批处理方式对 Tensor3 和 Tensor4 中的所有元素执行此操作。也就是说,我不想遍历 (len(Tensor3)) 范围内的所有值。我做了以下事情来实现这一点。
tensor6 = tensor5[tensor3[0],tensor4[0]]
但是 tensor6 的形状为 (255,255),而我希望得到一个形状为 (len(tensor3),len(tensor3)) 的张量。我想在 len(tensor3) 中所有可能的位置评估 tensor5。那是在(0,0),...(1000,1000),....(2000,2000),...
。我正在使用 TensorFlow 版本 1.12.0。我怎样才能做到这一点?
解决方案
我已经设法在 Tensorflow v 1.12 中运行了一些东西,但是如果它是预期的代码,请告诉我:
import tensorflow as tf
print(tf.__version__)
import numpy as np
tensor1 = tf.constant(np.random.randint(0,255, (2,512,512,1)), dtype='int32') #All elements in range [0,255]
tensor2 = tf.constant(np.random.randint(0,255, (2,512,512,1)), dtype='int32') #All elements in range [0,255]
tensor3 = tf.keras.backend.flatten(tensor1)
tensor4 = tf.keras.backend.flatten(tensor2)
tensor5 = tf.constant(np.random.randint(0,255, (255,255)), dtype='int32') #All elements in range [0,255]
elems = (tensor3, tensor4)
a = tf.map_fn(lambda x: tensor5[x[0], x[1]], elems, dtype=tf.int32)
print(tf.Session().run(a))
根据下面的评论,我想为map_fn
代码中使用的添加一个解释。由于for
没有 eager_execution 不支持循环,map_fn
因此(在某种程度上)等同于for
循环。
Amap_fn
有以下参数:operation_performed
, input_arguments
, optional_dtype
. 幕后发生的事情for
是沿着值的长度运行一个循环input_arguments
(它必须包含一个可迭代的对象),然后执行每个获得operation_performed
的值。如需进一步说明,请参阅文档。
函数参数的名称是我解释它们的方式,正如我想理解的那样,官方文档中没有给出。:)
推荐阅读
- c# - C# Selenium:ICapabilities 不再包含 BrowserName 的定义
- java - 如何从战争应用程序中获取 manifest.mf 文件
- javascript - 将文本文件读取到 jQuery 会返回“object Object”,而不是文本/字符串
- asp.net-core - .NET & Swagger 开始出现 401 错误
- google-colaboratory - 直接通过 Internet 将数据集导入 Google Colab
- javascript - 何时根据来自 redux 的数据更新本地反应状态?
- java - onLocationChanged() 方法没有被调用
- node.js - 为什么 NodeJS 需要一个链表结构来包含所有已注册的原生模块?
- webpack - 任何人都可以提供有效的 webpack4 和 Karma 配置吗?
- openstack - 任务配置无效:输入任务无效