笔者从人工智能小白的角度,力求能够从原文中解析出最高效率的知识。
之前看了很多博客去学习AI,但发现虽然有时候会感觉很省时间,但到了复现的时候就会傻眼,因为太多实现的细节没有提及。而且博客具有很强的主观性,因此我建议还是搭配原文来看。
请下载原文《ImageNet Classification with Deep Convolutional Neural Networks》搭配阅读本文,会更高效哦!
《ImageNet Classification with Deep Convolutional Neural Networks》首先,看完标题,摘要和结论,我了解到了以下信息:
训练数据集的方法也是先用小的数据集再过渡到ImageNet。打算用CNN,然后想办法把CNN网络做大。但是没有提到前人所做过的工作,也就是Related work。Section3会讨论文章所采用的新的网络架构。因为文章采用CNN网络架构很大,就很容易出现overfitting,于是section4会提及防止过拟合方法(我推测当时应该是讨论dropout等)。然后讨论了深度网络的必要性。
创新性的点在于端到端(End-to-End)。
(我认为这个架构没有很好的通用性,实现比较复杂,架构限制了就是使用两个GPU去切片,而与实际上出入可能比较多。除非真的遇到非常大的模型比如BERT)
class AlexNet(nn.Module):
def __init__(self,num_classes=2):
super(AlexNet, self).__init__()
self.features=nn.Sequential(
nn.Conv2d(3,48, kernel_size=11),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3,stride=2),
nn.Conv2d(48,128, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3,stride=2),
nn.Conv2d(128,192,kernel_size=3,stride=1,padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(192,192,kernel_size=3,stride=1,padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(192,128,kernel_size=3,stride=1,padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3,stride=2),
)
self.classifier=nn.Sequential(
nn.Linear(6*6*128,2048),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(2048,2048),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(2048,num_classes),
)
def DataEnhance(sourth_path,aim_dir,size):
name=0
#得到源文件的文件夹
file_list=os.listdir(sourth_path)
#创建目标文件的文件夹
if not os.path.exists(aim_dir):
os.mkdir(aim_dir)
for i in file_list:
img=Image.open('%s\%s'%(sourth_path,i))
name+=1
transform1=transforms.Compose([
transforms.ToTensor(),
transforms.ToPILImage(),
transforms.Resize(size),
])
img1=transform1(img)
img1.save('%s/%s'%(aim_dir,name))
代码整体架构算是比较简单,通过PyTorch搭建的代码,整体比较典型。