CNN
또다른 알고리즘




CNNEx1
import torch
import torch.nn as nn
inputs = torch.Tensor(1,1,28,28)
#batch, channel, height, weight
print(inputs.shape)
#padding, stride
conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1, stride=1)
print(conv1)
conv2 = nn.Conv2d(32,64,3,padding=1)
print(conv2)
pool = nn.MaxPool2d(kernel_size=2)
print(pool)
print()
output = conv1(inputs )
print(output.size())
print()
output = conv2(output)
print(output.size())
print()
output = pool(output)
print(output.size())
print()
output = output.view(output.size(0), -1)
print(output.size())
fclayer = nn.Linear(12544, 10)
output = fclayer(output)
print(output. size())
CNNEx2
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as dset
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
train_epochs = 10
batch_size = 100
train_data = dset.MNIST('MNIST_data/',
train=True,
download=True,
transform=transforms.ToTensor()) #하나만 있을때 직접연결가능
test_data = dset.MNIST('MNIST_data/',
train=False,
download=True,
transform=transforms.ToTensor())
data_loader = DataLoader(dataset=train_data,
batch_size=batch_size,
shuffle=True,
drop_last=True)
class CNNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Sequential(
nn.Conv2d(1, 32, 3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.layer2 = nn.Sequential(
nn.Conv2d(32,64,3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.fc =nn.Linear(64 * 7 * 7, 10)
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
out = out.view(out.size(0), -1)
y = self.fc(out)
return y
model = CNNet()
loss_func = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
total_batch = len(data_loader)
for epoch in range(train_epochs):
avg_loss = 0
for x_train, y_train in data_loader:
optimizer.zero_grad()
hypothesis = model(x_train)
loss = loss_func(hypothesis, y_train)
loss.backward()
optimizer.step()
avg_loss += loss / total_batch
print(f'epoch: {epoch+1} avg_loss:{avg_loss:.4f}')
with torch.no_grad():
x_test = test_data.test_data.view(len(test_data), 1, 28, 28).float()
y_test = test_data.test_labels
prediction = model(x_test)
correction_prediction = torch.argmax(prediction, dim=1) == y_test
accuracy = correction_prediction.float().mean()
print(f'accuracy: {accuracy.item() * 100:2.2f}')
CNNEx3
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as dset
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
#쿠다 사용하기==========================================================
train_epochs = 10
batch_size = 100
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('using device:', device)
train_data = dset.MNIST('MNIST_data/',
train=True,
download=True,
transform=transforms.ToTensor()) #하나만 있을때 직접연결가능
test_data = dset.MNIST('MNIST_data/',
train=False,
download=True,
transform=transforms.ToTensor())
data_loader = DataLoader(dataset=train_data,
batch_size=batch_size,
shuffle=True,
drop_last=True)
test_loader = DataLoader(dataset=test_data, #3333333333333333333333
batch_size=batch_size,
shuffle=False
)
class CNNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Sequential(
nn.Conv2d(1, 32, 3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.layer2 = nn.Sequential(
nn.Conv2d(32,64,3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.fc =nn.Linear(64 * 7 * 7, 10)
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
out = out.view(out.size(0), -1)
y = self.fc(out)
return y
model = CNNet().to(device) #11111111111
loss_func = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
total_batch = len(data_loader)
for epoch in range(train_epochs):
avg_loss = 0
for x_train, y_train in data_loader:
x_train = x_train.to(device, non_blocking=True) #병렬로 사용할수 있게(동시다발)2222
y_train = y_train.to(device, non_blocking=True) #병렬로 사용할수 있게(동시다발)2222
optimizer.zero_grad()
hypothesis = model(x_train)
loss = loss_func(hypothesis, y_train)
loss.backward()
optimizer.step()
avg_loss += loss / total_batch
print(f'epoch: {epoch+1} avg_loss:{avg_loss:.4f}')
with torch.no_grad(): #4444444444444444
model.eval()
correct = 0
total = 0
for x_test, y_test in test_loader:
x_test = x_test.to(device, non_blocking=True)
y_test = y_test.to(device, non_blocking=True)
pred = model(x_test)
pred_labels = pred.argmax(dim=1)
correct += (pred_labels == y_test).sum().item()
total += y_test.size(0)
accuracy = correct / total * 100
print('accuracy:{:2.2f}%'.format(accuracy))
'AI' 카테고리의 다른 글
| Day73_Ai(9)_Pm (0) | 2025.11.06 |
|---|---|
| Day73_Ai(9)_Am (0) | 2025.11.06 |
| Day72_Ai(8)_Am (0) | 2025.11.05 |
| Day70_Ai(6)_Pm (0) | 2025.11.03 |
| Day67_Ai(5)_Pm (0) | 2025.10.31 |