基于ResNet的CIFAER-10图像分类
CIFAR-10数据集
数据集规模
60000张32×32的彩色图片,共有十个类别,每个类别6000张图片。共50000张训练集图片和10000测试集图片。
数据集样本类别
飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车(汽车和卡车无重叠)—> 10分类任务
数据集网址
http://www.cs.toronto.edu/~kriz/cifar.html
网络
ResNet18
数据集规模
60000张32×32的彩色图片,共有十个类别,每个类别6000张图片。共50000张训练集图片和10000测试集图片。
数据集样本类别
飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车(汽车和卡车无重叠)—> 10分类任务
数据集网址
http://www.cs.toronto.edu/~kriz/cifar.html
网络
ResNet18
猫狗大战是来源于Kaggle的一个比赛项目,任务为给定一个有猫狗照片数据集,设计一种算法对测试集中的猫狗图片进行分类。
比赛项目网址:
https://www.kaggle.com/
网络
layer1: Conv2d(3, 16, 3, padding=1)
layer2: relu():
layer3: max_pool2d(2)
layer4: Conv2d(16, 16, 3, padding=1)
layer5: relu()
layer6: max_pool2d(2)
layer7: Linear(50*50*16, 128)
layer8: relu()
layer9: Linear(128, 64)
layer10: relu()
layer11: Linear(64, 2)
方法1:csv/txt
存储为csv、text或者json是最为简单的存储格式,阅读和解析起来非常方便。
如果使用Pandas则可以在存储的过程中设置压缩方法,对磁盘比较友好。
· 场景:通用
· 数据:表格、文本
· 文件大小:压缩后较少
· 读取速度:较慢
compression_opts = dict(method='zip',
archive_name='out.csv')
df.to_csv('out.zip', index=False,
compression=compression_opts)
方法2:hdf
HDF(Hierarchical Data File)是能满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。
HDF格式支持分层存储,可以将多个变量同时存在一个HDF文件中,同时在读取速度上也比较快。
· 场景:通用
· 数据:表格、文本
· 文件大小:较大
· 读取速度:较快
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]},
index=['a', 'b', 'c'])
df.to_hdf('data.h5', key='df', mode='w')
方法3:npy
如果将特征和数据处理为Numpy格式,则可以考虑存储为Numpy中的npy或npz格式。
· 场景:文件存储
· 数据:矩阵
· 文件大小:适中
· 读取速度:较快
import numpy as np
arr=np.arange(5)
np.save('test',arr)
print(np.load('test.npy'))
2.npz文件:压缩文件
使用np.savez()函数可以将多个数组保存到同一个文件中。读取.npz文件时使用np.load()函数,返回的是一个类似于字典的对象,因此可以通过数组名作为关键字对多个数组进行访问。
import numpy as np
a = np.arange(5)
b = np.arange(6)
c = np.arange(7)
np.savez('test', a, b, c_array=c) # c_array是数组c的命名
data = np.load('test.npz')
print('arr_0 : ', data['arr_0'])
print('arr_1 : ', data['arr_1'])
print('c_array : ', data['c_array'])
方法4:memmap
NumPy实现了一个类似于ndarray的memmap对象,它允许将大文件分成小段进行读写,而不是一次性将整个数组读入内存。
如果需要存储的对象大于内存,则可以选择memmap进行存储。
· 场景:大文件存储
· 数据:矩阵
· 文件大小:较大、特别大
· 读取速度:适中
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
fpc[0,:] = 0
方法5:joblib
类似于pkl存储,joblib.dump可以将任意的Python对象持久化到一个文件中,并使用joblib.load进行读取。
· 场景:任意
· 数据:任意
· 文件大小:适中
· 读取速度:适中
from joblib import load, dump
X = [[0, 0], [1, 1]]
Y = [1, 0]
dump((X, Y), "data.pkl")
X, Y = load("data.pkl")
1.卷积
原理:卷积过程就是卷积核行列对称翻转后,在图像上滑动,并且依次相乘求和.(与滤波器不同的一点就是多了一个卷积核翻转的过程).然后经过池化,激活后输入下一层.
单个卷积层可以提取特征,当多个卷积叠加后即可逐步学习出更高语义的抽象特征.
2.卷积核
卷积核:其中卷积核主要有两类,普通卷积核和11的卷积核.普通卷积核同时改变图像的空间域和通道域,如下图所示,每个卷积核的通道数与输入相同,
卷积后会得到一个通道为一的特征图,我们希望卷积后的通道数有几个,卷积核就有几个.
11卷积核,视野大小为单个特征位点,能够实现在空间域不改变的情况下实现通道域信息的交流,
并且获得我们想要的通道数量(一般是降维).