cuda()的修改--- a/train.py
+++ b/train.py
@@ -20,12 +20,14 @@ import torchvision
+device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+
def train(epoch):
start = time.time()
@@ -33,8 +35,8 @@ def train(epoch):
for batch_index, (images, labels) in enumerate(cifar100_training_loader):
if args.gpu:
- labels = labels.cuda()
- images = images.cuda()
+ labels = labels.to(device)
+ images = images.to(device)
@@ -86,8 +88,8 @@ def eval_training(epoch=0, tb=True):
for (images, labels) in cifar100_test_loader:
if args.gpu:
- images = images.cuda()
- labels = labels.cuda()
+ images = images.to(device)
+ labels = labels.to(device)
input_tensor = torch.Tensor(1, 3, 32, 32)
if args.gpu:
- input_tensor = input_tensor.cuda()
- writer.add_graph(net, input_tensor)
+ input_tensor = input_tensor.to(device)
+ #writer.add_graph(net, input_tensor)
--- a/models/resnet.py
+++ b/models/resnet.py
@@ -41,7 +41,7 @@ class BasicBlock(nn.Module):
#use 1*1 convolution to match the dimension
if stride != 1 or in_channels != BasicBlock.expansion * out_channels:
self.shortcut = nn.Sequential(
- nn.Conv2d(in_channels, out_channels * BasicBlock.expansion, kernel_size=1, stride=stride, bias=False),
+ nn.Conv2d(in_channels, out_channels * BasicBlock.expansion, kernel_size=3, stride=stride, padding=1, bias=False),
nn.BatchNorm2d(out_channels * BasicBlock.expansion)
)
@@ -82,20 +82,20 @@ class ResNet(nn.Module):
def __init__(self, block, num_block, num_classes=100):
super().__init__()
- self.in_channels = 64
+ self.in_channels = 8
self.conv1 = nn.Sequential(
- nn.Conv2d(3, 64, kernel_size=3, padding=1, bias=False),
- nn.BatchNorm2d(64),
+ nn.Conv2d(3, 8, kernel_size=3, padding=1, bias=False),
+ nn.BatchNorm2d(8),
nn.ReLU(inplace=True))
#we use a different inputsize than the original paper
#so conv2_x's stride is 1
- self.conv2_x = self._make_layer(block, 64, num_block[0], 1)
- self.conv3_x = self._make_layer(block, 128, num_block[1], 2)
- self.conv4_x = self._make_layer(block, 256, num_block[2], 2)
- self.conv5_x = self._make_layer(block, 512, num_block[3], 2)
- self.avg_pool = nn.AdaptiveAvgPool2d((1, 1))
- self.fc = nn.Linear(512 * block.expansion, num_classes)
+ self.conv2_x = self._make_layer(block, 8, num_block[0], 1)
+ self.conv3_x = self._make_layer(block, 8, num_block[1], 2)
+ self.conv4_x = self._make_layer(block, 8, num_block[2], 2)
+ self.conv5_x = self._make_layer(block, 8, num_block[3], 2)
+ self.avg_pool = nn.AvgPool2d(kernel_size=4)
+ self.fc = nn.Linear(8 * block.expansion, num_classes)
def _make_layer(self, block, out_channels, num_blocks, stride):
"""make resnet layers(by layer i didnt mean this 'layer' was the
@@ -129,7 +129,8 @@ class ResNet(nn.Module):
output = self.conv4_x(output)
output = self.conv5_x(output)
output = self.avg_pool(output)
- output = output.view(output.size(0), -1)
+ #output = output.view(output.size(0), -1)
+ output = output.view(-1,int(output.numel()//output.size(0)))
output = self.fc(output)
修改文件:conf/global_settings.py
@@ -1,3 +1,12 @@
+'''
+Descripttion:
+version: v1.0.0
+Author: xqqin
+email: xqqin@listenai.com
+Date: 2023-09-10 02:44:23
+LastEditors:
+LastEditTime: 2023-09-10 02:58:04
+'''
""" configurations for this project
author baiyu
@@ -33,7 +42,7 @@ TIME_NOW = datetime.now().strftime(DATE_FORMAT)
LOG_DIR = 'runs'
#save weights file per SAVE_EPOCH epoch
-SAVE_EPOCH = 10
+SAVE_EPOCH = 1
train.py
@@ -20,12 +20,14 @@ import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
-from torch.utils.tensorboard import SummaryWriter
+#from torch.utils.tensorboard import SummaryWriter
@@ -45,11 +47,11 @@ def train(epoch):
n_iter = (epoch - 1) * len(cifar100_training_loader) + batch_index + 1
last_layer = list(net.children())[-1]
- for name, para in last_layer.named_parameters():
- if 'weight' in name:
- writer.add_scalar('LastLayerGradients/grad_norm2_weights', para.grad.norm(), n_iter)
- if 'bias' in name:
- writer.add_scalar('LastLayerGradients/grad_norm2_bias', para.grad.norm(), n_iter)
+ #for name, para in last_layer.named_parameters():
+ # if 'weight' in name:
+ # writer.add_scalar('LastLayerGradients/grad_norm2_weights', para.grad.norm(), n_iter)
+ # if 'bias' in name:
+ # writer.add_scalar('LastLayerGradients/grad_norm2_bias', para.grad.norm(), n_iter)
print('Training Epoch: {epoch} [{trained_samples}/{total_samples}]\tLoss: {:0.4f}\tLR: {:0.6f}'.format(
loss.item(),
@@ -60,15 +62,15 @@ def train(epoch):
))
#update training loss for each iteration
- writer.add_scalar('Train/loss', loss.item(), n_iter)
+ #writer.add_scalar('Train/loss', loss.item(), n_iter)
if epoch <= args.warm:
warmup_scheduler.step()
- for name, param in net.named_parameters():
- layer, attr = os.path.splitext(name)
- attr = attr[1:]
- writer.add_histogram("{}/{}".format(layer, attr), param, epoch)
+ #for name, param in net.named_parameters():
+ # layer, attr = os.path.splitext(name)
+ # attr = attr[1:]
+ # writer.add_histogram("{}/{}".format(layer, attr), param, epoch)
finish = time.time()
outputs = net(images)
loss = loss_function(outputs, labels)
@@ -110,9 +112,9 @@ def eval_training(epoch=0, tb=True):
print()
#add informations to tensorboard
- if tb:
- writer.add_scalar('Test/Average loss', test_loss / len(cifar100_test_loader.dataset), epoch)
- writer.add_scalar('Test/Accuracy', correct.float() / len(cifar100_test_loader.dataset), epoch)
+ #if tb:
+ # writer.add_scalar('Test/Average loss', test_loss / len(cifar100_test_loader.dataset), epoch)
+ # writer.add_scalar('Test/Accuracy', correct.float() / len(cifar100_test_loader.dataset), epoch)
#since tensorboard can't overwrite old values
#so the only way is to create a new tensorboard log
- writer = SummaryWriter(log_dir=os.path.join(
- settings.LOG_DIR, args.net, settings.TIME_NOW))
+ #writer = SummaryWriter(log_dir=os.path.join(
+ # settings.LOG_DIR, args.net, settings.TIME_NOW))