tensorflow循环改变tensor的值

使用tf.concat()实现4维tensor的循环赋值

alist=[[[[1,1,1],[2,2,2],[3,3,3]],[[4,4,4],[5,5,5],[6,6,6]]],[[[7,7,7],[8,8,8],[9,9,9]],[[10,10,10],[11,11,11],[12,12,12]]]] #2,2,3,3-n,c,h,w
kenel=(np.asarray(alist)*2).tolist()
print(kenel)
inputs=tf.constant(alist,dtype=tf.float32)
kenel=tf.constant(kenel,dtype=tf.float32)
inputs=tf.transpose(inputs,[0,2,3,1]) #n,h,w,c
kenel=tf.transpose(kenel,[0,2,3,1]) #n,h,w,c
uints=inputs.get_shape()
h=int(uints[1])
w=int(uints[2])
encoder_output=[]
for b in range(int(uints[0])):
    encoder_output_c=[]
    for c in range(int(uints[-1])):
        one_channel_in = inputs[b, :, :, c]
        one_channel_in = tf.reshape(one_channel_in, [1, h, w, 1])
        one_channel_kernel = kenel[b, :, :, c]
        one_channel_kernel = tf.reshape(one_channel_kernel, [h, w, 1, 1])
        encoder_output_cc = tf.nn.conv2d(input=one_channel_in, filter=one_channel_kernel, strides=[1, 1, 1, 1], padding="SAME")
        if c==0:
            encoder_output_c=encoder_output_cc
        else:
            encoder_output_c=tf.concat([encoder_output_c,encoder_output_cc],axis=3)

    if b==0:
        encoder_output=encoder_output_c
    else:
        encoder_output = tf.concat([encoder_output, encoder_output_c], axis=0)

with tf.Session() as sess:
    print(sess.run(tf.transpose(encoder_output,[0,3,1,2])))
    print(encoder_output.get_shape())

输出:

[[[[  32.   48.   32.]
   [  56.   84.   56.]
   [  32.   48.   32.]]

  [[ 200.  300.  200.]
   [ 308.  462.  308.]
   [ 200.  300.  200.]]]


 [[[ 512.  768.  512.]
   [ 776. 1164.  776.]
   [ 512.  768.  512.]]

  [[ 968. 1452.  968.]
   [1460. 2190. 1460.]
   [ 968. 1452.  968.]]]]
(2, 3, 3, 2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值