return len(self.samples)
def __getitem__(self idx):
fp target = self.samples[idx
img = Image.open(fp)
if self.transform:
img = self.transform(img)
return img target
train_dataset = AudioDataset(root transform=transforms.Compose([
transforms.Resize((480 480))
transforms.ToTensor()
transforms.Normalize((0.5 0.5 0.5) (0.5 0.5 0.5))
))
ViT模型我们将利用ViT来作为我们的模型:Vision Transformer在论文中首次介绍了一幅图像等于16x16个单词 , 并成功地展示了这种方式不依赖任何的cnn , 直接应用于图像Patches序列的纯Transformer可以很好地执行图像分类任务 。
将图像分割成Patches , 并将这些Patches的线性嵌入序列作为Transformer的输入 。 Patches的处理方式与NLP应用程序中的标记(单词)是相同的 。
由于缺乏CNN固有的归纳偏差(如局部性) , Transformer在训练数据量不足时不能很好地泛化 。 但是当在大型数据集上训练时 , 它确实在多个图像识别基准上达到或击败了最先进的水平 。
实现的结构如下所示:
class ViT(nn.Sequential):
def __init__(self
in_channels: int = 3
patch_size: int = 16
emb_size: int = 768
img_size: int = 356
depth: int = 12
n_classes: int = 1000
**kwargs):
super().__init__(
PatchEmbedding(in_channels patch_size emb_size img_size)
TransformerEncoder(depth emb_size=emb_size **kwargs)
ClassificationHead(emb_size n_classes)
)
训练训练循环也是传统的训练过程:
vit = ViT(
n_classes = len(train_dataset.classes)
)
vit.to(device)
# train
train_loader = DataLoader(train_dataset batch_size=32 shuffle=True)
optimizer = optim.Adam(vit.parameters() lr=1e-3)
scheduler = ReduceLROnPlateau(optimizer 'max' factor=0.3 patience=3 verbose=True)
criterion = nn.CrossEntropyLoss()
num_epochs = 30
for epoch in range(num_epochs):
print('Epoch {/{'.format(epoch num_epochs - 1))
print('-' * 10)
vit.train()
running_loss = 0.0
running_corrects = 0
for inputs labels in tqdm.tqdm(train_loader):
inputs = inputs.to(device)
labels = labels.to(device)
optimizer.zero_grad()
with torch.set_grad_enabled(True):
outputs = vit(inputs)
loss = criterion(outputs labels)
_ preds = torch.max(outputs 1)
loss.backward()
optimizer.step()
running_loss += loss.item() * inputs.size(0)
running_corrects += torch.sum(preds == labels.data)
epoch_loss = running_loss / len(train_dataset)
epoch_acc = running_corrects.double() / len(train_dataset)
scheduler.step(epoch_acc)
- PHP|马化腾也急了,视频号要开始收费了,可是腾讯的问题才开始出现
- Kindle|Kindle后时代,升级从硬件开始,墨案Air拉开6寸小屏的王者争夺战
- 智能手机|OV发布5000万像素传感器OV50H:1/1.3寸大底、8K视频
- 自从微软发布windows11操作系统以来|不满足这个条件的电脑不能安装win11
- 自从微信更新了8.0版本后|微信8.0版本更新:表情大变革,秒变扫描仪
- 微信已经更新至8.0版本了|1招解锁微信朋友圈长视频!
- 服务业|从创业英雄到万人厌恶的资本家,马云是对是错?人民日报这么说的
- 中外短视频大赛圆满收官,优秀作品展映中!
- 自从手机升级了鸿蒙系统后|华为鸿蒙系统的4个新功能
- 短视频|短视频与长视频的2022