gpt4 book ai didi

python - CNN 中的 8 个预定义二进制卷积滤波器 - Tensorflow

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:36 24 4
gpt4 key购买 nike

我正在尝试在 Tensorflow 中执行以下操作:

I need this

为此,到目前为止我已完成以下操作:

def new_weights(shape):
return tf.Variable(tf.truncated_normal(shape, stddev=0.05))

# From here down is another function
shape = [3, 3, 1, 8,]

H = [
[[0, 1, 0,],[0, -1, 0,],[0, 0, 0,],],
[[0, 0, 1,],[0, -1, 0,],[0, 0, 0,],],
[[0, 0, 0,],[0, -1, 1,],[0, 0, 0,],],
[[0, 0, 0,],[0, -1, 0,],[0, 0, 1,],],
[[0, 0, 0,],[0, -1, 0,],[0, 1, 0,],],
[[0, 0, 0,],[0, -1, 0,],[1, 0, 0,],],
[[0, 0, 0,],[1, -1, 0,],[0, 0, 0,],],
[[1, 0, 0,],[0, -1, 0,],[0, 0, 0,],]
]

anchor_weights = tf.reshape(tf.cast(H, tf.float32), shape)

layer = tf.nn.conv2d(input=input,
filter=anchor_weights,
strides=[1, 1, 1, 1],
padding='SAME')

layer = tf.nn.max_pool(value=layer,
ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1],
padding='SAME')

layer = tf.nn.relu(layer)

feature_maps = layer

shape = [1, 1, 8, 1]

v = tf.cast(new_weights(shape), tf.float32)

# To put all together
layer = tf.nn.conv2d(input=feature_maps,
filter=v,
strides=[1, 1, 1, 1],
padding="SAME")

但是当我去打印anchor_weights和feature_maps时,我会这样做作为响应。

anchor_weights e feature_maps

对我来说,我需要的东西似乎完全错误,就像我向您展示的第一张图片一样。

我不知道如何解决这个问题,有什么想法吗?

最佳答案

我认为 H 数组中的元素顺序错误。您将 H 填充为 [8,3,3] 张量。然后使用 tf.reshape ,这会改变张量的形状,但不会交换元素。你需要这样的东西:

H = [
[
[[0, 0, 0, 0, 0, 0, 0, 1]],
[[1, 0, 0, 0, 0, 0, 0, 0]],
[[0, 1, 0, 0, 0, 0, 0, 0]]
],
[
[[ 0, 0, 0, 0, 0, 0, 1, 0]],
[[-1,-1,-1,-1,-1,-1,-1,-1]],
[[ 0, 0, 1, 0, 0, 0, 0, 0]]
],
[
[[0, 0, 0, 0, 0, 1, 0, 0]],
[[0, 0, 0, 0, 1, 0, 0, 0]],
[[0, 0, 1, 0, 0, 0, 0, 0]]
]
]
anchor_weights = tf.cast(H, tf.float32)

关于python - CNN 中的 8 个预定义二进制卷积滤波器 - Tensorflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133013/

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