我试图在Tensorflow中执行以下操作:
为此我到目前为止做了以下事情:
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时,我会做出回应。
对我而言,我所需要的东西似乎完全错了,就像我向你展示的第一张图片一样。
我不知道如何解决这个问题,任何想法?
答案 0 :(得分:1)
我认为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)