tensorflow反卷积的可视化



import tensorflow as tf
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt


'''
    一张图片的反卷积
'''

im = Image.open('timg.jpg')
images = np.asarray(im)
print(images.shape)

images = np.reshape(images,[1,750,500,3])

img = tf.Variable(images,dtype=tf.float32)
# kernel = tf.get_variable(name='a',shape=[3, 3, 3, 3], dtype=tf.float32,
#                                   initializer=tf.contrib.layers.xavier_initializer())

# 卷积核
kernel = tf.get_variable(name='a',shape=[3, 3, 3, 64], dtype=tf.float32,
                                  initializer=tf.contrib.layers.xavier_initializer())

# 反卷积核
kernel2 = tf.get_variable(name='a1',shape=[3, 3, 64, 64], dtype=tf.float32,
                                  initializer=tf.contrib.layers.xavier_initializer())

#tf.nn.conv2d(input=input_op, filter=weights, strides=[1, dh, dw, 1], padding="SAME")

# 卷积
conv1 = tf.nn.conv2d(input=img, filter=kernel,strides=[1, 1, 1, 1], padding="SAME")
# print(conv1)
# 池化
pool = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")

shape_ = pool.get_shape().as_list()
print(shape_) #[1, 375, 250, 64]
output_shape = [shape_[0], shape_[1] * 2, shape_[2] * 2, shape_[3]]

print('pool:',pool.get_shape())
# 反卷积操作
conts = tf.nn.conv2d_transpose(pool,kernel2,output_shape,strides=[1,2,2,1],padding='SAME')

# print(conv1.get_shape())



with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    conv1_convert = sess.run(tf.transpose(conts, [0, 3, 1, 2]))

    print(conv1_convert.shape)

    fig6, ax6 = plt.subplots(nrows=8, ncols=8, figsize=(8, 8))
    plt.title('Pool2 32x7x7')
    for i in range(8):
        for j in range(8):
            ax6[i][j].imshow(conv1_convert[0][(i + 1) * j])

    plt.show()


 

 原始图片(test.jpg):

 

具体过程请参考:https://github.com/nianxiongdi/deep-laering

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值