关于Python中的self用法的详细解释 + 深度机器学习中的batch

http://blog.csdn.net/CLHugh/article/details/75000104        (Python中self用法详解)


写的很不错,推荐看一看


关于batch解释,从知乎上看到的

“深度机器学习中的batch的大小对学习效果有何影响?”

https://www.zhihu.com/question/32673260

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个可以使用机器学习模型识别自己姓名的 Python 程序: 首先我们需要准备一些数据,将自己的姓名和其他姓名分别放在两个文件夹,例如: ``` ./data/me ├── me_1.jpg ├── me_2.jpg ├── me_3.jpg └── ... ./data/others ├── other_1.jpg ├── other_2.jpg ├── other_3.jpg └── ... ``` 然后我们使用深度学习框架 PyTorch 来训练一个卷积神经网络模型来识别自己的姓名。以下是示例代码: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset import torchvision.transforms as transforms import torchvision.datasets as datasets # 定义数据预处理 data_transforms = { 'train': transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), 'val': transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), } # 定义数据集和数据加载器 data_dir = './data' image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']} dataloaders = {x: DataLoader(image_datasets[x], batch_size=4, shuffle=True, num_workers=4) for x in ['train', 'val']} dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']} class_names = image_datasets['train'].classes # 定义模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1) self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1) self.conv3 = nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(56*56*256, 1024) self.fc2 = nn.Linear(1024, 2) def forward(self, x): x = self.conv1(x) x = nn.ReLU()(x) x = self.pool(x) x = self.conv2(x) x = nn.ReLU()(x) x = self.pool(x) x = self.conv3(x) x = nn.ReLU()(x) x = self.pool(x) x = x.view(-1, 56*56*256) x = self.fc1(x) x = nn.ReLU()(x) x = self.fc2(x) return x # 定义训练函数 def train_model(model, criterion, optimizer, num_epochs=25): for epoch in range(num_epochs): for phase in ['train', 'val']: if phase == 'train': model.train() # Set model to training mode else: model.eval() # Set model to evaluate mode running_loss = 0.0 running_corrects = 0 # Iterate over data. for inputs, labels in dataloaders[phase]: inputs = inputs.to(device) labels = labels.to(device) # zero the parameter gradients optimizer.zero_grad() # forward # track history if only in train with torch.set_grad_enabled(phase == 'train'): outputs = model(inputs) _, preds = torch.max(outputs, 1) loss = criterion(outputs, labels) # backward + optimize only if in training phase if phase == 'train': loss.backward() optimizer.step() # statistics running_loss += loss.item() * inputs.size(0) running_corrects += torch.sum(preds == labels.data) epoch_loss = running_loss / dataset_sizes[phase] epoch_acc = running_corrects.double() / dataset_sizes[phase] print('{} Loss: {:.4f} Acc: {:.4f}'.format( phase, epoch_loss, epoch_acc)) # 定义训练参数 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model = Net().to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 训练模型 train_model(model, criterion, optimizer, num_epochs=25) ``` 训练完成后,我们可以使用以下代码来测试模型: ```python import torch import torchvision.transforms as transforms from PIL import Image # 加载模型 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model = torch.load('./model.pth').to(device) model.eval() # 定义数据预处理 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) # 读取测试图像 img_path = './test.jpg' img = Image.open(img_path).convert('RGB') img_tensor = transform(img).unsqueeze(0).to(device) # 预测图像类别 with torch.no_grad(): outputs = model(img_tensor) _, preds = torch.max(outputs, 1) # 输出预测结果 class_names = ['others', 'me'] print('Predicted class: {}'.format(class_names[preds.cpu().numpy()[0]])) ``` 你只需要将上述代码的“me”改为你的姓名,在训练模型时使用自己的数据进行训练,然后运行测试代码即可识别自己的姓名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值