Pytorch 를 이용 하여 권 적 신경 망 을 실현 하 다.
3884 단어 딥 러 닝
import torch
import torchvision
import torch.utils.data as Data
import torch.nn as nn
from matplotlib import pyplot as plt
import time
#
BATCH_SIZE=50
LEARNING_RATE=0.001
EPOCH_NUM=3
#
#torchvision MNIST ,
train_data=torchvision.datasets.MNIST(
root='./mnist', #root
train=True, # ,True ,False
transform=torchvision.transforms.ToTensor(), # Tensor
download=True # ,True ,False
)
#
test_data=torchvision.datasets.MNIST(root='./mnist',train=False)
#DataLoader
train_loader=Data.DataLoader(
dataset=train_data, #
batch_size=BATCH_SIZE, # batch size
shuffle=True # ,True ,False
)
# , x,y
# unsqueeze() squeeze() ,
# , (dim=1), FloatTensor, 2000 ,
test_x=torch.unsqueeze(test_data.test_data,dim=1).type(torch.FloatTensor)[:2000]/255
test_y=torch.data.test_labels[:2000]
#
class CNN(nn.Module):
def __init__(self):
#
super(CNN,self).__init__()
# , + +
self.conv1=nn.Sequential(
#
nn.Conv2d(
in_channels=1, # , 1
out_channels=16, # 16, 16
kernel_size=5, #
stride=1, #
padding=2 # 2
),
#
nn.ReLU()
#
nn.MaxPool2d(kernel_size=2)
)
#
self.conv2=nn.Sequential(
nn.Conv2d(
in_channels=16, # channel 16, 16
out_channels=32, # 32
kernel_size=5,
stride=1,
padding=2
),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2)
)
# , 28, 2 , 7*7, 32 , 32*7*7 , 10
self.out=nn.Linear(32*7*7,10)
def forward(self,x):
conv1_res=self.conv1(x)
conv2_res=self.conv2(conv1_res)
# view() Tensor
out=conv2_res.view(conv2_res.size(0),-1)
output=self.out(out)
return output
#
cnn=CNN()
print(cnn)
# Adam ,
optimizer=torch.optim.Adam(cnn.parameters(),lr=LEARNING_RATE)
loss_func=nn.CrossEntropyLoss()
# list
step_list=[]
loss_list=[]
accuracy_list=[]
counter=0
t1=time.time()
for epoch in range(EPOCH_NUM):
# enumerate +
for step, (b_x,b_y) in enumerate(train_loader):
predict_y=cnn(b_x)
loss=loss_func(predict_y,b_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
#
counter +=1
#
if step % 25 ==0:
test_output=cnn(test_x) #
pred_y=torch.max(test_output,1)[1].data.squeeze().numpy() # y
accuracy=float(torch.sum(pred_y==test_y))/float(test_y.size(0)) #
print('epoch:',epoch,'|step:%4d' %step, '|loss:%6f' %loss.data.numpy(),'|accuracy:%4f' %accuracy)
# list
step_list.append(counter)
loss_list.append(loss.data.numpy())
accuracy_list.append(accuracy)
#
plt.cla()
plt.plot(step_list,loss_list, c='red', label='loss')
plt.plot(step_list,accuracy_list,c='blue',label='accuracy')
plt.legend(loc='best')
plt.pause(0.1)
t2=time.time()
print(t2-t1) 이로써 이미 지 를 처리 하기 위해 두 개의 은 층 신경 망 을 구축 했다.주로 위의 코드 에 따라 list 를 이용 하여 해당 하 는 변화 곡선 을 그 리 는 것 을 배 울 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
caffe 데이터 구조 깊이 학습 (4) - blob 데이터 구조 blob. hpp 파일 상세 해석이 줄 은 shape 벡터 를 통 해 Blob 의 모양 을 바 꾸 는 또 다른 변형 함 수 를 정의 합 니 다. 이 줄 은 Blob 모양 의 함 수 를 읽 고 구성원 변수 shape 로 돌아 가 는 것 을 정의 합 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.