resnet即参差网络
原论文为:Deep Residual Learning for Image Recognition
resnet用到的主要思想有两个:
1.当图像数据的长宽缩小时,会导致丢失一定的图像特征,所以这个时候需要增加图像数据的通道数。
2.为了防止加深训神经网络的层次时,训练效果比未加深网络前差,当图像数据经过两个神经网络层时,输出的数据应加上原输入数据,作为下一层网络的输入数据。
使用Resnet对cifa10图像数据集进行分类的代码如下(之前的博客写过cifar10数据集的处理,这里就不写了):
import pickle
import tensorflow as tf
import numpy as np
import os
CIFAR_PATH = './cifar10'
# 从文件中读取数据
def load_data(filename):
with open(filename,'rb') as f:
datas = pickle.load(f,encoding = "bytes")
return datas[b'data'],datas[b'labels']
# 数据集的操作方法
class CifarData:
def __init__(self,filenames,need_shuffle):
all_datas = []
all_labels = []
for filename in filenames:
datas,labels = load_data(filename)
for data,label in zip(datas,labels):
all_datas.append(data)
all_labels.append(label)
self._data = np.vstack(all_datas)
self._data = self._data / 127.5 - 1
self._label = np.hstack(all_labels)
print(self._data.shape,self._label.shape)
# 数据集的大小
self._length = self._label.shape[0]
# 下标
self._indicator = 0
# 是否需要洗牌
self._need_shuffle = need_shuffle
if self._need_shuffle:
self._shuffle_data()