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)