首页 > 解决方案 > 有没有一种有效的方法可以在 Tensorflow 中选择 5 个张量区域?

问题描述

例如,给定一个形状为 [28, 28] 的张量 m。

我想用张量随机选择五个区域,每个区域的形状是[3, 3]。

然后,我想修改这些区域的值。

标签: tensorflow

解决方案


一种解决方案是在循环内随机提取:

import random
tensor = tf.ones(shape=(28,28))
desired_shape = (3,3)
dim1 = random.randint(0,tensor.shape[0] - desired_shape[0])
dim2 = random.randint(0,tensor.shape[1] - desired_shape[1])
extracted_tensor = tensor[dim1:dim1+desired_shape[0]][:,dim2 + desired_shape[1]]

首先导入随机模块并创建一个(或使用您的)张量。设置你想要的形状。然后创建两个随机变量,每个维度一个,并通过子列表提取张量。

但是,请记住,你不能像这个线程所说的那样在 tensorflow 中为张量赋值。

要解决这个问题,首先将其转换为 numpy 数组,更改值并再次将其转换为张量,因此这将是您问题的解决方案。

np_arr = tensor.numpy()
for i in range(5):
    dim1 = random.randint(0,tensor.shape[0] - desired_shape[0])
    dim2 = random.randint(0,tensor.shape[1] - desired_shape[1])
    np_arr[dim1:dim1+desired_shape[0]][:,dim2 + desired_shape[1]] = [1,2,3] # any value

new_tens = tf.convert_to_tensor(np_arr)

推荐阅读