gpt4 book ai didi

tensorflow - 如何在 tensorflow 中制作棋盘矩阵?

转载 作者:行者123 更新时间:2023-12-02 01:02:30 24 4
gpt4 key购买 nike

我需要初始化一个棋盘矩阵来合并我的 tensorflow 图中的两个特征图,我能够像这样在 TF 旁边使用 numpy 对已知形状进行初始化

def checkerboard_concat(x1, x2):

mask1 = np.ones((10,10,3))
mask1[1::2,::2] = 0
mask1[::2,1::2] = 0

mask2 = np.zeros((10,10,3))
mask2[1::2,::2] = 1
mask2[::2,1::2] = 1

return x1 * mask1 + x2 * mask2

但我无法使用动态形状来实现,我使用了返回形状输出 (N,)tf.shape() 但我不知道' 如何对其进行动态评估。

此外,我尝试使用 tf.ones_like(x1) 但无法使用下标将其更改为 numpy 数组

最佳答案

这是一个基于模和异或运算的解决方案:

import tensorflow as tf

def make_checkerboard(N):
"""
Return a NxN checkerboard matrix M, i.e. with M(i,j) == True if (i+j) mod 2 == 1
:param N: Length of the checkerboard (can be dynamic)
:return: Boolean tensor of shape NxN
"""
range_n = tf.range(N)
odd_ind = tf.cast(tf.mod(range_n, 2), dtype=tf.bool)

odd_rows = tf.tile(tf.expand_dims(odd_ind , -1), [1, N])
odd_cols = tf.tile(tf.expand_dims(odd_ind , 0), [N, 1])

checker = tf.logical_xor(odd_rows, odd_cols)
return checker

def checkerboard_concat(x1, x2, is_batch=True):

dynamic_n = tf.shape(x1)[1 if is_batch else 0]
mask2 = make_checkerboard(dynamic_n)
mask2 = tf.expand_dims(mask2, -1) # Expand masks to cover channels
mask1 = tf.logical_not(mask2)

return x1 * tf.cast(mask1, dtype=x1.dtype) + x2 * tf.cast(mask2, dtype=x2.dtype)


# Example:
tf.reset_default_graph()
sess = tf.InteractiveSession()

x1 = tf.ones((4,4,3), dtype=tf.int32)
x2 = tf.ones((4,4,3), dtype=tf.int32) * 2

x = checkerboard_concat(x1, x2, is_batch=False)
res = sess.run(x)
print(res[...,0])
# [[1 2 1 2]
# [2 1 2 1]
# [1 2 1 2]
# [2 1 2 1]]

关于tensorflow - 如何在 tensorflow 中制作棋盘矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49675921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com