欧美麻豆久久久久久中文_成年免费观看_男人天堂亚洲成人_中国一级片_动漫黄网站免费永久在线观看_国产精品自产av一区二区三区

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁 > IT資訊 > 精選文章 > 如何利用PyTorch API構(gòu)建CNN?

如何利用PyTorch API構(gòu)建CNN?

2020-07-16 16:15:01 | 來源:中培企業(yè)IT培訓(xùn)網(wǎng)

很多人對于卷積神經(jīng)網(wǎng)絡(luò)(CNN)并不了解,卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò),它包括卷積計算并具有很深的結(jié)構(gòu),卷積神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)的代表性算法之一。那么如何利用PyTorch API構(gòu)建CNN?方式有哪些?今天本文將以一個簡單的指南,將幫助您構(gòu)建和了解構(gòu)建簡單的CNN的方式。通過閱讀本文之后,將能夠基于PyTorch API構(gòu)建一個簡單的CNN,并使用FashionMNIST日期集對服裝進行分類。但前提是您已具備人工神經(jīng)網(wǎng)絡(luò)知識。

  如何利用PyTorch API構(gòu)建CNN?

CNN或卷積神經(jīng)網(wǎng)絡(luò)的工作原理與人眼的工作原理非常相似。CNN背后的核心運算是矩陣加法和乘法,因此無需擔(dān)心它們。

但是要了解CNN的工作原理,我們需要了解如何將圖像存儲在計算機中。

  CNN架構(gòu)

CNN的核心功能是卷積運算。將圖像矩陣與濾波器矩陣相乘以從圖像矩陣中提取一些重要特征。

通過使濾波器矩陣移動通過圖像矩陣來填充卷積矩陣。

CNN的另一個重要組成部分稱為最大池層。這有助于我們減少功能部件的數(shù)量,即使功能銳化以使我們的CNN性能更好。

對于所有卷積層,我們都應(yīng)用RELU激活函數(shù)。

在將卷積層映射到輸出時,我們需要使用線性層。因此,我們使用稱為全連接層(簡稱為fc)的層。最終fc的激活大部分是S型激活函數(shù)。

我們可以清楚地看到所有輸入值在0和1之間的輸出映射。

現(xiàn)在,您已經(jīng)知道我們將要使用的圖層。這些知識足以構(gòu)建一個簡單的CNN,但是一個可選的調(diào)用dropout的層將有助于CNN發(fā)揮良好的作用。輟學(xué)層位于fc層之間,這會以設(shè)定的概率隨機丟棄連接,這將有助于我們更好地訓(xùn)練CNN。

我們的CNN體系結(jié)構(gòu),但最后,我們將在fc層之間添加一個dropout。

不再浪費時間,我們將開始編寫代碼。

import torchimport torchvision# data loading and transformingfrom torchvision.datasets import FashionMNISTfrom torch.utils.data import DataLoaderfrom torchvision import transforms# The output of torchvision datasets are PILImage images of range [0, 1]. # We transform them to Tensors for input into a CNN## Define a transform to read the data in as a tensor

data_transform = transforms.ToTensor()# choose the training and test datasets

train_data = FashionMNIST(root='./data', train=True,

download=True, transform=data_transform)

test_data = FashionMNIST(root='./data', train=False,

download=True, transform=data_transform)# Print out some stats about the training and test data

print('Train data, number of images: ', len(train_data))

print('Test data, number of images: ', len(test_data))# prepare data loaders, set the batch_size

batch_size = 20

train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)

test_loader = DataLoader(test_data, batch_size=batch_size, shuffle=True)# specify the image classes

classes = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',

'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

For visualizing the Data import numpy as npimport matplotlib.pyplot as plt

%matplotlib inline

# obtain one batch of training images

dataiter = iter(train_loader)

images, labels = dataiter.next()

images = images.numpy()# plot the images in the batch, along with the corresponding labels

fig = plt.figure(figsize=(25, 4))for idx in np.arange(batch_size):

ax = fig.add_subplot(2, batch_size/2, idx+1, xticks=[], yticks=[])

ax.imshow(np.squeeze(images[idx]), cmap='gray')

ax.set_title(classes[labels[idx]])# Defining the CNNimport torch.nn as nnimport torch.nn.functional as Fclass Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

# 1 input image channel (grayscale), 10 output channels/feature maps

# 3x3 square convolution kernel

## output size = (W-F)/S +1 = (28-3)/1 +1 = 26

# the output Tensor for one image, will have the dimensions: (10, 26, 26)

# after one pool layer, this becomes (10, 13, 13)

self.conv1 = nn.Conv2d(1, 10, 3)

# maxpool layer

# pool with kernel_size=2, stride=2

self.pool = nn.MaxPool2d(2, 2)

# second conv layer: 10 inputs, 20 outputs, 3x3 conv

## output size = (W-F)/S +1 = (13-3)/1 +1 = 11

# the output tensor will have dimensions: (20, 11, 11)

# after another pool layer this becomes (20, 5, 5); 5.5 is rounded down

self.conv2 = nn.Conv2d(10, 20, 3)

# 20 outputs * the 5*5 filtered/pooled map size

self.fc1 = nn.Linear(20*5*5, 50)

# dropout with p=0.4

self.fc1_drop = nn.Dropout(p=0.4)

# finally, create 10 output channels (for the 10 classes)

self.fc2 = nn.Linear(50, 10)

# define the feedforward behavior

def forward(self, x):

# two conv/relu + pool layers

x = self.pool(F.relu(self.conv1(x)))

x = self.pool(F.relu(self.conv2(x)))

# prep for linear layer

# this line of code is the equivalent of Flatten in Keras

x = x.view(x.size(0), -1)

# two linear layers with dropout in between

x = F.relu(self.fc1(x))

x = self.fc1_drop(x)

x = self.fc2(x)

# final output

return x# instantiate and print your Net

net = Net()

print(net)import torch.optim as optim# using cross entropy whcih combines softmax and NLL loss

criterion = nn.CrossEntropyLoss()# stochastic gradient descent with a small learning rate and some momentum

optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)# Training the CNNdef train(n_epochs):

loss_over_time = [] # to track the loss as the network trains

for epoch in range(n_epochs): # loop over the dataset multiple times

running_loss = 0.0

for batch_i, data in enumerate(train_loader):

# get the input images and their corresponding labels

inputs, labels = data

# zero the parameter (weight) gradients

optimizer.zero_grad()

# forward pass to get outputs

outputs = net(inputs)

# calculate the loss

loss = criterion(outputs, labels)

# backward pass to calculate the parameter gradients

loss.backward()

# update the parameters

optimizer.step()

# print loss statistics

# to convert loss into a scalar and add it to running_loss, we use .item()

running_loss += loss.item()

if batch_i % 1000 == 999: # print every 1000 batches

avg_loss = running_loss/1000

# record and print the avg loss over the 1000 batches

loss_over_time.append(avg_loss)

print('Epoch: {}, Batch: {}, Avg. Loss: {}'.format(epoch + 1, batch_i+1, avg_loss))

running_loss = 0.0

print('Finished Training')

return loss_over_time# define the number of epochs to train for

n_epochs = 30 # start small to see if your model works, initially# call train

training_loss = train(n_epochs)# visualize the loss as the network trained

plt.plot(training_loss)

plt.xlabel('1000's of batches')

plt.ylabel('loss')

plt.ylim(0, 2.5) # consistent scale

plt.show()# obtain one batch of test images

dataiter = iter(test_loader)

images, labels = dataiter.next()# get predictions

preds = np.squeeze(net(images).data.max(1, keepdim=True)[1].numpy())

images = images.numpy()# plot the images in the batch, along with predicted and true labels

fig = plt.figure(figsize=(25, 4))for idx in np.arange(batch_size):

ax = fig.add_subplot(2, batch_size/2, idx+1, xticks=[], yticks=[])

ax.imshow(np.squeeze(images[idx]), cmap='gray')

ax.set_title("{} ({})".format(classes[preds[idx]], classes[labels[idx]]),

color=("green" if preds[idx]==labels[idx] else "red"))

以上就是關(guān)于如何利用PyTorch API構(gòu)建CNN的全部內(nèi)容介紹,想了解更多關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的信息,請繼續(xù)關(guān)注中培偉業(yè)。

標(biāo)簽: CNN 人工智能
主站蜘蛛池模板: 伊人久久久综合 | 男人天堂2018手机在线版 | 国产精品久久久久久久久久久久人四虎 | 日韩精品一区二区三区中文无码 | 色36cccwww在线播放 | 你懂得视频在线观看 | h人成在线看免费视频 | 亚洲人成在线观看网站不卡 | 欧美综合网站 | dy888午夜国产精品 | 欧洲多毛裸体XXXXX | 欧美人体裸体xxxxpppp极品 | 蜜桃成人免费视频在线播放 | aV性色在线乱叫 | 人妻暴雨中被强制侵犯在线 | 又硬又粗进去好疼A片麻豆 中文字幕一区二区三区视频 | 日本高清色视频免费 | 97久久天天综合色天天综合色hd | 精品人妻无码一区二区三区手机板 | 爽到憋不住潮喷大喷水视频 | 三年成全免费高清大全 | 国产精品久久久久永久免费看 | 亚洲AV女人18毛片水真多 | 国产精品久久久久久久va果冻 | 亚洲日本va一区二区三区 | 亚洲精品9999久久久久无码 | 嫩草在线| sifangtv国产在线播放 | 日韩一卡2卡3卡4卡新区亚洲 | 中文精品久久久久鬼色 | 无码人妻一区二区三区免费N鬼沢 | 国产精品无码素人福利不卡 | 国产精品无码av无码 | 在线亚洲午夜片AV大片 | 四虎成人影视 | 国产寡妇色xxⅹ交肉视频 | 伊人婷婷色香五月综合缴缴情 | 欧美熟妇精品视频 | 中国av在线播放 | 国产精品精品自在线拍 | 四虎影院在线视频 |