前言
其他所有部分同上一篇AlexNet一樣,所以就不再贅訴,直接看VGG搭建部分。
模型
VGG是第一個采取塊進行模塊化搭建的模型。
def vgg_block(num_convs,in_channels,out_channels):layers=[]for _ in range(num_convs):layers.append(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1))layers.append(nn.ReLU())in_channels=out_channelslayers.append(nn.MaxPool2d(kernel_size=2,stride=2))return nn.Sequential(*layers)
可選擇幾個卷積之后再做池化,將這個做為一個塊,在模型中多次使用。
conv_arch=((1,64),(1,128),(2,256),(2,512),(2,512))
def vgg(conv_arch):conv_blks=[]in_channels=len(frames_len)for (num_convs,out_channels) in conv_arch:conv_blks.append(vgg_block(num_convs,in_channels,out_channels))in_channels=out_channelsreturn nn.Sequential(*conv_blks,nn.Flatten(),nn.Linear(out_channels*7*7,4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,len(labels))
net=vgg(conv_arch).to_device(device)#cuda
直接跟AlexNet模型替換就能使用。
簡單來看一下這個模型,先做兩次一個卷積外加一個池化,再做兩次兩個卷積外加一個池化,將整個網絡的深度提升了很多。
結果
剛跑完,todesk就連接不上電腦了,所以就口述一下結果吧。
在上一次的10分類下,test的acc提高了20%左右,并且在增大frames_len的情況下,train的acc為100%,test的acc提升至90%,似乎是有捕獲到視頻的分類。
在100分類下的效果也還可以,train達到99.75%,test達到71%。
整體來看,VGG對于手語視頻的分類是具有一定的效果的,對于其中的特征確實學習到了東西。