cifar10图像分类数据集不归一化&卷积池化参数解释

链接:https://pan.baidu.com/s/1Nxty7ntGSUUA18oa_-ORSQ
提取码:in9m
cifar10数据集百度云链接

从本地加载图片(不归一化)

import os
import numpy as np
import pickle as p

def load_CIFAR_batch(filename):
    with open(filename,'rb')as f:
        data_dict = p.load(f,encoding='bytes')
        images = data_dict[b'data']
        labels =data_dict[b'labels']
        
        images = images.reshape(10000,3,32,32)
        images = images.transpose(0,2,3,1)
        labels = np.array(labels)
        return images,labels

def load_CIFAR_data(data_dir):
    images_train=[]
    labels_train=[]
    for i in range(5):
        f = os.path.join(data_dir,'data_batch_%d'%(i+1))
        print('loading',f)
        images_batch,label_batch = load_CIFAR_batch(f)
        
        images_train.append(images_batch)
        labels_train.append(label_batch)
        
        Xtrain = np.concatenate(images_train)
        Ytrain = np.concatenate(labels_train)
        del images_batch,label_batch
    Xtest,Ytest = load_CIFAR_batch(os.path.join(data_dir,'test_batch'))
    print('finished loadding CIFAR-10 data')
    return Xtrain,Ytrain,Xtest,Ytest
data_dir = 'D:\cat_dog\cifar-10-python\cifar-10-batches-py'
train_images, train_labels, test_images, test_labels = load_CIFAR_data(data_dir)

cifar10图像分类数据集不归一化&卷积池化参数解释_第1张图片

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
# train_images, test_images = train_images / 255.0, test_images / 255.0 这句话注释掉

卷积池化函数的参数解释

卷积

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,
name=None)
tf.nn.depthwise_conv2d(input, filter, strides, padding, name=None)
tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides,
padding, name=None)
input:需要做卷积的输入数据。注意:这是一个4维的张量([batch, in_height,
in_width, in_channels]),要求类型为float32或float64其中之一。
• filter:卷积核。[filter_height, filter_width, in_channels, out_channels]
• strides:图像每一维的步长,是一个一维向量,长度为4
• padding:定义元素边框与元素内容之间的空间。“SAME"或"VALID”,这个值
决定了不同的卷积方式。当为"SAME"时,表示边缘填充,适用于全尺寸操作;
当为"VALID"时,表示边缘不填充。
• use_cudnn_on_gpu:bool类型,是否使用cudnn加速
• name:该操作的名称
• 返回值:返回一个tensor,即feature map

池化

最大池化:tf.nn.max_pool(value, ksize, strides, padding, name=None)
平均池化:tf.nn.avg_pool(value, ksize, strides, padding, name=None)
• value:需要池化的输入。一般池化层接在卷积层后面,所以输入通常是conv2d
所输出的feature map,依然是4维的张量([batch, height, width,
channels])。
• ksize:池化窗口的大小,由于一般不在batch和channel上做池化,所以ksize一
般是[1,height, width,1],
• strides:图像每一维的步长,是一个一维向量,长度为4
• padding:和卷积函数中padding含义一样
• name:该操作的名称
• 返回值:返回一个tensor

模型结果分析

模型搭建与训练同上一篇
cifar10图像分类数据集不归一化&卷积池化参数解释_第2张图片
结果表明数据不归一化不怎么影响训练时间和acc,前提是数据量级一致,量级不同损失函数会崩溃

你可能感兴趣的:(tensorflow与图像处理,卷积,python,深度学习,卷积神经网络,tensorflow)