cnn 进阶 深度网络

3232 - filter 55 步幅1 输出为什么不是2828? [32-5 + 2PADDING(2)]/ STRIDES +1 (因为padding了两个)

WHEN filter 33 padding =1 55 2 、 7*7 padding3

先padding数计算出来 , 乘2 ,加上输入 输入矩阵 然后减去 输出矩阵 除以 步幅 再加1


import pickle
import numpy as np
import tensorflow as tf
sess =tf.Session()


#定义一个读取文件的函数, 把里面的 data 和 labels读出来

def load_CIFAR_batch(filename):
    """ load single batch of cifar """
    with open(filename, "rb")as f:
        datadict = pickle.load(f,encoding="iso-8859-1")
        X = datadict["data"]
        Y = datadict["labels"]
        X = X.reshape(10000, 3, 32, 32)
        Y = np.array(Y)
        return X, Y
#上面函数 就说了 是返回X Y  分别代表 data 和 labels , 导入一个batch1 玩玩看
X ,Y = load_CIFAR_batch(\
"C:/Users/admin/Desktop/cifar-10-python/cifar-10-batches-py/data_batch_1")
#\有链接代码的作用, 所以路径都要换成/  , 第二行的\  就起到了链接的下一行的作用

print(X.shape)
print(Y.shape)
(10000, 3, 32, 32)
(10000,)
#修理下X的 数据格式  ,数据“放到 ”tf 下了
#多次运行 就会发生问题。。。  被来回换位置
#X = tf.reshape(X, [-1, 3, 32, 32])
#X = tf.transpose(X, [0, 2, 3, 1])
#print(sess.run(X[0]))
print(X.shape)


(10000, 3, 32, 32)
from PIL import Image #导入这个模块可视化一下
import pylab   
X12  = X[12]  #看下马 
r = Image.fromarray(X12[0])
g = Image.fromarray(X12[1])
b = Image.fromarray(X12[2])
X12_m = Image.merge("RGB",(r,g,b))
pylab.imshow(X12_m)
pylab.show()

[外链图片转存失败(img-DmtC8YXt-1568717642717)(output_6_0.png)]

#为了满足卷积层 格式需要     
#Given an input tensor of shape `[batch, in_height, in_width, in_channels]`
#H W在中间,  通道在最后
X = tf.transpose(X, [0, 2, 3, 1])

print(X.shape)
print(X[0].shape)
print(X[0].shape)


print(sess.run(tf.size(X[0])))  #3072   32*32 *3

##各种转换,  是需要可视化一下,,,下面的图, 不然很容易出错
#转置来转置去, 图像不会颠倒或反转, 这就是转置的限制吧 。那其他形式变换矩阵 。。。
(10000, 32, 32, 3)
(32, 32, 3)
(32, 32, 3)
3072
#X12  = X[12]  #看下马  ,马的 看不了了, 放到 tf里了
X12  = sess.run(X[12])  #X12    ,3个 32*32的矩阵
r = Image.fromarray(X12[0])
g = Image.fromarray(X12[1])
b = Image.fromarray(X12[2])
X12_m = Image.merge("RGB",(r,g,b))
pylab.imshow(X12_m)
pylab.show()
#这里没办法, 位置变了, Image无法读取这种格式

[外链图片转存失败(img-rBCk3LUw-1568717642720)(output_8_0.png)]

#卷一层玩玩看

#看下原函数, 贼复杂, 滤波器参数5*5*3, 32个
X = tf.cast(X, tf.float32)
filter1 = tf.truncated_normal([5,5,3,32], stddev = 0.1) 
#搞32个随机的 5*5,3 ch 通道(32核心)矩阵

C1 = tf.nn.conv2d(X,filter1,strides=[1, 1, 1, 1], padding = "SAME" )
Pool1 =tf.nn.max_pool(X, ksize = [1, 2, 2, 1],strides = [1, 2, 2, 1], \
                      padding = "SAME")

print(sess.run(C1).shape)

# 32*32 -  filter 5*5  步幅1  输出为什么不是28*28?
(10000, 32, 32, 32)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值