#!は/ usr / binに/のenvのpython #のエンコーディング:UTF-8 ''」 @author:liualex @contact:[email protected] @software:pycharm @file:main.py @time:2019年8月16日16: 21 @desc: 「」」 インポートトーチ インポートとしてNN torch.nn インポートtorchvisionの インポート変換としてtorchvision.transforms インポートデータローダとしてtorch.utils.data.dataloader インポートPDB インポートのOS はos.environ [ 『CUDA_VISIBLE_DEVICES 』 = 『3 』 変換 =transforms.Compose( [ transforms.RandomHorizontalFlip()、 transforms.RandomGrayscale()、 transforms.ToTensor()、 transforms.Normalize(( 0.5、0.5、0.5)、(0.5、0.5、0.5 )) ] ) train_set = torchvision.datasets .CIFAR10( ルート = " ./data " 、 ダウンロード = Trueの場合、 電車 = Trueの場合、 変換 = 変換 ) train_loader = dataloader.DataLoader( データセット = train_set、 BATCH_SIZE = 100、 シャッフル = 偽 ) test_set = torchvision.datasets.CIFAR10( ルート = " ./data " 、 ダウンロード = 真、 電車 = Falseを、 変換 = 変換 ) test_loader = dataloader.DataLoader( データセット = test_set、 BATCH_SIZE = 100 、 シャッフル = 真 ) クラスAlexNet(nn.Module): デフ __init__ (自己、class_num): スーパー(AlexNet、自己)。__init__ () self.features = nn.Sequential( nn.Conv2d( 3、64、kernel_size = 3、ストライド= 1、パディング= 1 )、 nn.ReLU(インプレース = TRUE)、 nn.MaxPool2d(kernel_size = 2、ストライド= 2 )、 nn.Conv2d( 64、192、kernel_size = 3、ストライド= 1、パディング= 1 )、 nn.ReLU(インプレース = TRUE)、 nn.MaxPool2d(kernel_size = 2、ストライド= 2 )、 nn.Conv2d ( 192、384、kernel_size = 3、ストライド= 1、パディング= 1 )、 nn.ReLU(インプレース =真)、 nn.Conv2d( 384、256、kernel_size = 3、ストライド= 1、パディング= 1 )、 nn.ReLU(インプレース = 真)、 nn.Conv2d( 256、256、kernel_size = 3、パディング= 1 )、 nn.ReLU(インプレース = TRUE)、 nn.MaxPool2d(kernel_size = 2、ストライド= 2 )、 ) self.classifier = nn.Sequential( nn.Dropout()、 nn.Linear( 256 * 4 * 4、4096 )、 nn.ReLU(インプレース = TRUE)、 nn.Dropout()、 nn.Linear( 4096、4096 )、 nn.ReLU(インプレース = TRUE)、 nn.Linear( 4096 、class_num)、 ) デフ前方(自己、X): X = self.features(x)は 、X = x.view(x.size(0)、256 * 4×4 ) X = self.classifier(X) リターンXの デバイス = torch.device(" CUDA " なら torch.cuda.is_available()他 " CPU " ) モデル = AlexNet(10 ) model.to(デバイス) epoches LR = 100 = 0.001 基準 = nn.CrossEntropyLoss() オプティマイザ = torch.optim.Adam(model.parameters()、LR = LR) のためのエポックにおける範囲(epoches) のための I、(画像、ラベル)に列挙(train_loader ): 画像 = images.to(装置) ラベル = labels.to(デバイス) 出力 = モデル(画像) 損失 = 基準(出力ラベル) optimizer.zero_grad() loss.backward() optimizer.step() もし(I + 1) %100 == 0: プリント(' エポック[{} / {}]、損失:{:.4f} ' .format(エポック + 1 、epoches、loss.item())) トーチを有します。 no_grad(): 正しい = 0 合計 = 0 のために(画像、ラベル)でtest_loader: 画像、ラベル = images.to(デバイス)、labels.to(デバイス) 出力 = モデル(画像) _は、予測された(= torch.maxをoutput.data、1 ) 合計 + = labels.size(0) # pdb.set_trace() 正しい+ =(予測== 。ラベル).SUM()項目() プリント(" 合計{}イメージの精度:{}%" .format)合計/正しい(合計、100 *)
畳み込み計算式:N =(W - F. + 2 P )/ S + +1、Wは、入力画像のサイズをいい、ここで、Fは、コンボリューションカーネルのサイズを指し、Pは、パディングを意味し、Sはストライドを指し
結果:のみのみ78.57パーセントの結果、100回繰り返さので。