我想使用tensorflow
来制作类似于Conv2D的神经网络层。
下面是我要实现的。就像卷积层一样,层使用内核,但是输出大于输入。
The layer image that I want to implement
但是,似乎没有办法只能使用tensorflow
操作来实现。
我设法通过将tensorflow
张量转换为numpy
数组来实现以下代码,但是我仍然不知道如何将4D输出数组合并为2D数组。
input = [[a, b],
[c, d]]
kernel = [[1, -1],
[2, 1]]
output = [[input[0][0] * kernel, input[0][1] * kernel],
[input[1][0] * kernel, input[1][1] * kernel]]
#since "input[0][0] * kernel" is 2D, "output" becomes 4D array.
有什么方法可以仅使用tensorflow
来实现?
如果没有,我应该使用哪种方法代替?
答案 0 :(得分:0)
class MyLayer(tf.keras.layers.Layer):
def __init__(self, kernel):
super(MyLayer, self).__init__()
self.k = tf.constant(kernel)
def build(self, input_shape):
self.i = input_shape
def call(self, input):
x = tf.reshape(input, [-1])
return tf.map_fn(lambda s: tf.scalar_mul(s, self.k), x)
mylayer = MyLayer([[1.0, -1.0], [-1.0, 1.0]])
x = tf.constant([[1.0, 2.0, 3.0], [3.0, 4.0, 5.0]])
with tf.Session() as sess:
print (sess.run(r))
输出:
[[[ 1. -1.]
[-1. 1.]]
[[ 2. -2.]
[-2. 2.]]
[[ 3. -3.]
[-3. 3.]]
[[ 3. -3.]
[-3. 3.]]
[[ 4. -4.]
[-4. 4.]]
[[ 5. -5.]
[-5. 5.]]]