主頁 >  其他 > 別玩手機 影像分類比賽

別玩手機 影像分類比賽

2023-05-10 08:21:55 其他

浙大寧波理工學院資料科學與大資料專業 別玩手機影像分類比賽

1 選手禁止互相抄襲,發現結果雷同者將取消成績;

2 請在基線模型基礎上修改代碼,不允許使用第三方封裝庫、套件或者其他工具,否則做 0 分處理;

3 每位同學請獨立完成比賽,不允許就比賽技術問題進行相互交流,更不允許索要代碼,請自覺遵守規則,保持良好的品格;

4 晚上 12:00 以后不允許遞交,否則做 0 分處理;

5 結果檔案必須是程式生成,不允許手動修改或者后期處理,


賽題背景

如今,手機已成為大眾離不開的生活工具,而且它的迅速發展使得它的功能不再以通訊為主,手機逐漸發展為可移動的大眾傳播媒體終端設備,甚至可以比作為第五媒體,當今的大學生群體是智能手機使用者中的一支巨大的的隊伍,零零后大學生在進入大學以來,學習生活中過度的依賴手機,甚至上課時忘記攜帶手機便會手足無措,神情恍惚,本比賽要求通過監控攝像頭等拍攝到的畫面判斷畫面中的人物是否正在使用手機


資料集介紹

本比賽采用的資料集中,訓練集共 2180 張使用手機的圖片(位于目錄 data/data146247/train/0_phone/)、1971 張沒有使用手機的圖片(位于目錄 data/data146247/train/1_no_phone/)
測驗集共 1849 張圖片,無標注資訊


總體思路

本 Baseline 采用 LeNet 模型架構,參賽者可以在此基礎上進行修改,也可以使用全新的網路架構沖榜~~
LeNet 網路結構圖如下
image.png
LeNet-5 共有 7 層,不包含輸入,每層都包含可訓練引數;每個層有多個 Feature Map,每個 FeatureMap 通過一種卷積濾波器提取輸入的一種特征,然后每個 FeatureMap 有多個神經元,

  1. 預處理
    • 生成標簽
    • 讀取資料集
  2. 訓練
    • 模型組網
    • 反向傳播
  3. 預測
    • 模型預測并保存結果
!rm aug.csv
!rm test.csv
!rm train.csv
!rm -r augment
!rm -r train
!rm -r test
!unzip -oq /home/aistudio/data/data146247/train.zip
!unzip -oq /home/aistudio/data/data146247/test.zip  #解壓資料集
!mkdir augment
!mkdir augment/0_phone
!mkdir augment/1_no_phone

import numpy as np
import pandas as pd
import paddle.nn.functional as F
import paddle.vision.transforms as T
from paddle.nn import Conv2D, BatchNorm2D, Linear, Dropout
from paddle.nn import AdaptiveAvgPool2D, MaxPool2D, AvgPool2D
import paddle
import paddle.nn as nn
import os
from paddle.io import Dataset, DataLoader, IterableDataset
from sklearn.utils import shuffle
from PIL import Image
from paddle.vision.transforms import Resize
PLACE = paddle.CUDAPlace(0)  # 在gpu上訓練

預處理

讀取解壓好的資料集,將圖片名全部保存 train.csv(訓練集)和 test.csv(測驗集)中

處理完后,就可以定義資料集類并讀取資料集了

# 寫入訓練集csv
list1=[]
for path in os.listdir("train/1_no_phone") :
    if path[-3:]=='jpg':
        k=["train/1_no_phone/"+path,1]
        list1.append(k)
for path in os.listdir("train/0_phone") :
    if path[-3:]=='jpg':
        k=["train/0_phone/"+path,0]
        list1.append(k)
result_df = pd.DataFrame(list1)
result_df.columns=['image_id', 'label']
data = https://www.cnblogs.com/bellongyan/archive/2023/05/10/shuffle(result_df)
data.to_csv('train.csv', index=False, header=True)
# 寫入測驗集csv
list1=[]
for path in os.listdir("test") :
    if path[-3:]=='jpg':
        k=["test/"+path]
        list1.append(k)
result_df = pd.DataFrame(list1)
result_df.columns=['image_id']
result_df.to_csv('test.csv', index=False, header=True)
pic_list=pd.read_csv("train.csv")
pic_list=np.array(pic_list)
train_list=pic_list[:int(len(pic_list)*0.8)]
test_list=pic_list[int(len(pic_list)*0.8):]
print(len(train_list))
train_list
    3320

    array([['train/1_no_phone/tWuCoxIkbAedBjParJZQGn9XVYLK16hS.jpg', 1],
           ['train/1_no_phone/rkX9Rj7YqENc85bFxdDaw14Is0yCeAnp.jpg', 1],
           ['train/0_phone/wfhSF1W5B46doJKEc7VTU2OxbCtRDAI9.jpg', 0],
           ...,
           ['train/1_no_phone/uvHPyhakBK89o43fjJRXgZ2CIEpGzSAQ.jpg', 1],
           ['train/0_phone/rlw854paLXkqc3zhgo9N2idUSeyIPAWf.jpg', 0],
           ['train/0_phone/Wy59OfsandAo1lp2S7e3cEutPbi4zqYF.jpg', 0]],
          dtype=object)

離線影像增廣

對影像進行 70%概率的隨機水平翻轉,并對翻轉后的影像亮度、對比度和飽和度進行變化,將增廣后的影像保存到 augment 檔案夾,將影像資料追加到 train_list 后面,

import paddle.vision.transforms as T

directory_name = "augment/"

for i in range(len(train_list)):
    img_path = '/'.join(train_list[i][0].split('/')[:4])
    img_path[6:-4]
    img = Image.open(img_path)
    img = T.RandomHorizontalFlip(0.7)(img)
    # img.save(directory_name + "/" + img_path[6:-4] + "-tramsforms1.jpg")
    img = T.ColorJitter(0.5, 0.5, 0.5, 0.0)(img)
    img.save(directory_name + "/" + img_path[6:-4] + "-tramsforms.jpg")
# 寫入訓練集csv
list4=[]
for path in os.listdir("augment/1_no_phone") :
    if path[-3:]=='jpg':
        k=["augment/1_no_phone/"+path,1]
        list4.append(k)
for path in os.listdir("augment/0_phone") :
    if path[-3:]=='jpg':
        k=["augment/0_phone/"+path,0]
        list4.append(k)
result_df = pd.DataFrame(list4)
result_df.columns=['image_id', 'label']
data = https://www.cnblogs.com/bellongyan/archive/2023/05/10/shuffle(result_df)
data.to_csv('aug.csv', index=False, header=True)
aug_list=pd.read_csv("aug.csv")
aug_list=np.array(aug_list)
train_list = np.append(train_list, aug_list, axis=0)
print(len(train_list))
train_list
    6640

    array([['train/1_no_phone/tWuCoxIkbAedBjParJZQGn9XVYLK16hS.jpg', 1],
           ['train/1_no_phone/rkX9Rj7YqENc85bFxdDaw14Is0yCeAnp.jpg', 1],
           ['train/0_phone/wfhSF1W5B46doJKEc7VTU2OxbCtRDAI9.jpg', 0],
           ...,
           ['augment/1_no_phone/WPNLg72lV8Jhn5TpokKMf34QR1Fd6IcH-tramsforms.jpg',
            1],
           ['augment/0_phone/qJcVtZH2yiAL6w34rOQopT9IemzEDjWK-tramsforms.jpg',
            0],
           ['augment/0_phone/qwoDX3ENaVuCk9IYjAnBHbv7TLUPR5Kr-tramsforms.jpg',
            0]], dtype=object)
class H2ZDateset(Dataset):
    def __init__(self, data_dir):
        super(H2ZDateset, self).__init__()
        self.pic_list=data_dir
    def __getitem__(self, idx):
        image_file,label=self.pic_list[idx]
        img = Image.open(image_file)  # 讀取圖片
        img = img.resize((256, 256), Image.ANTIALIAS)  # 圖片大小樣式歸一化
        img = np.array(img).astype('float32')  # 轉換成陣列型別浮點型32位
        img = img.transpose((2, 0, 1))
        img = img/255.0  # 資料縮放到0-1的范圍
        return img, np.array(label, dtype='int64').reshape(-1)

    def __len__(self):
        return len(self.pic_list)
h2zdateset = H2ZDateset(train_list)
BATCH_SIZE = 32
loader = DataLoader(h2zdateset, places=PLACE, shuffle=True, batch_size=BATCH_SIZE, drop_last=False, num_workers=0, use_shared_memory=False)
data,label = next(loader())
print("讀取的資料形狀:", data.shape,label.shape)
    讀取的資料形狀: [32, 3, 256, 256] [32, 1]
train_data = https://www.cnblogs.com/bellongyan/archive/2023/05/10/H2ZDateset(train_list)
test_data = H2ZDateset(test_list)
train_data_reader = DataLoader(train_data, places=PLACE, shuffle=True, batch_size=BATCH_SIZE, drop_last=False, num_workers=2, use_shared_memory=True)
test_data_reader = DataLoader(test_data, places=PLACE, shuffle=True, batch_size=BATCH_SIZE, drop_last=False, num_workers=2, use_shared_memory=True)

訓練

首先進行 LeNet 模型組網

這里用到了 paddle.Model 的 summary()方法來將模型可視化,通過 summary()可以快速列印模型的網路結構,并且,執行該陳述句的時候會執行一次網路,在動態圖中,我們需要手算網路的輸入和輸出層,如果出現一點問題就會報錯非常麻煩,而 summary()能大大縮短 debug 時間

自定義 ResNeXt 類,匯入 resnext101_64x4d 網路,并開啟預訓練模型的選項,增一個線性層,將原本模型的 1000 分類問題變成 2 分類問題

class ResNeXt(nn.Layer):
    def __init__(self):
        super(ResNeXt, self).__init__()
        self.layer = paddle.vision.models.resnext101_64x4d(pretrained=True)
        self.fc = nn.Sequential(
            nn.Dropout(0.5),
            nn.Linear(1000, 2)
        )

    def forward(self, inputs):
        outputs = self.layer(inputs)
        outputs = self.fc(outputs)

        return outputs

model = ResNeXt()
paddle.Model(model).summary((-1, 3, 256, 256))
    W0510 00:32:22.100802  8743 gpu_context.cc:244] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
    W0510 00:32:22.104816  8743 gpu_context.cc:272] device: 0, cuDNN Version: 7.6.


    -------------------------------------------------------------------------------
      Layer (type)         Input Shape          Output Shape         Param #
    ===============================================================================
        Conv2D-1        [[1, 3, 256, 256]]   [1, 64, 128, 128]        9,408
        BatchNorm-1     [[1, 64, 128, 128]]   [1, 64, 128, 128]         256
      ConvBNLayer-1     [[1, 3, 256, 256]]   [1, 64, 128, 128]          0
        MaxPool2D-1     [[1, 64, 128, 128]]    [1, 64, 64, 64]           0
        Conv2D-2        [[1, 64, 64, 64]]     [1, 256, 64, 64]       16,384
        BatchNorm-2      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-2     [[1, 64, 64, 64]]     [1, 256, 64, 64]          0
        Conv2D-3        [[1, 256, 64, 64]]    [1, 256, 64, 64]        9,216
        BatchNorm-3      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-3     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-4        [[1, 256, 64, 64]]    [1, 256, 64, 64]       65,536
        BatchNorm-4      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-4     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-5        [[1, 64, 64, 64]]     [1, 256, 64, 64]       16,384
        BatchNorm-5      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-5     [[1, 64, 64, 64]]     [1, 256, 64, 64]          0
    BottleneckBlock-1   [[1, 64, 64, 64]]     [1, 256, 64, 64]          0
        Conv2D-6        [[1, 256, 64, 64]]    [1, 256, 64, 64]       65,536
        BatchNorm-6      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-6     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-7        [[1, 256, 64, 64]]    [1, 256, 64, 64]        9,216
        BatchNorm-7      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-7     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-8        [[1, 256, 64, 64]]    [1, 256, 64, 64]       65,536
        BatchNorm-8      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-8     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
    BottleneckBlock-2   [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-9        [[1, 256, 64, 64]]    [1, 256, 64, 64]       65,536
        BatchNorm-9      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-9     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-10       [[1, 256, 64, 64]]    [1, 256, 64, 64]        9,216
      BatchNorm-10      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-10     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-11       [[1, 256, 64, 64]]    [1, 256, 64, 64]       65,536
      BatchNorm-11      [[1, 256, 64, 64]]    [1, 256, 64, 64]        1,024
      ConvBNLayer-11     [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
    BottleneckBlock-3   [[1, 256, 64, 64]]    [1, 256, 64, 64]          0
        Conv2D-12       [[1, 256, 64, 64]]    [1, 512, 64, 64]       131,072
      BatchNorm-12      [[1, 512, 64, 64]]    [1, 512, 64, 64]        2,048
      ConvBNLayer-12     [[1, 256, 64, 64]]    [1, 512, 64, 64]          0
        Conv2D-13       [[1, 512, 64, 64]]    [1, 512, 32, 32]       36,864
      BatchNorm-13      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-13     [[1, 512, 64, 64]]    [1, 512, 32, 32]          0
        Conv2D-14       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-14      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-14     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-15       [[1, 256, 64, 64]]    [1, 512, 32, 32]       131,072
      BatchNorm-15      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-15     [[1, 256, 64, 64]]    [1, 512, 32, 32]          0
    BottleneckBlock-4   [[1, 256, 64, 64]]    [1, 512, 32, 32]          0
        Conv2D-16       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-16      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-16     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-17       [[1, 512, 32, 32]]    [1, 512, 32, 32]       36,864
      BatchNorm-17      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-17     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-18       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-18      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-18     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
    BottleneckBlock-5   [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-19       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-19      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-19     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-20       [[1, 512, 32, 32]]    [1, 512, 32, 32]       36,864
      BatchNorm-20      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-20     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-21       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-21      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-21     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
    BottleneckBlock-6   [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-22       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-22      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-22     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-23       [[1, 512, 32, 32]]    [1, 512, 32, 32]       36,864
      BatchNorm-23      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-23     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-24       [[1, 512, 32, 32]]    [1, 512, 32, 32]       262,144
      BatchNorm-24      [[1, 512, 32, 32]]    [1, 512, 32, 32]        2,048
      ConvBNLayer-24     [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
    BottleneckBlock-7   [[1, 512, 32, 32]]    [1, 512, 32, 32]          0
        Conv2D-25       [[1, 512, 32, 32]]   [1, 1024, 32, 32]       524,288
      BatchNorm-25     [[1, 1024, 32, 32]]   [1, 1024, 32, 32]        4,096
      ConvBNLayer-25     [[1, 512, 32, 32]]   [1, 1024, 32, 32]          0
        Conv2D-26      [[1, 1024, 32, 32]]   [1, 1024, 16, 16]       147,456
      BatchNorm-26     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-26    [[1, 1024, 32, 32]]   [1, 1024, 16, 16]          0
        Conv2D-27      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-27     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-27    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-28       [[1, 512, 32, 32]]   [1, 1024, 16, 16]       524,288
      BatchNorm-28     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-28     [[1, 512, 32, 32]]   [1, 1024, 16, 16]          0
    BottleneckBlock-8   [[1, 512, 32, 32]]   [1, 1024, 16, 16]          0
        Conv2D-29      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-29     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-29    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-30      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-30     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-30    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-31      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-31     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-31    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-9  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-32      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-32     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-32    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-33      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-33     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-33    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-34      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-34     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-34    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-10  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-35      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-35     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-35    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-36      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-36     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-36    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-37      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-37     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-37    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-11  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-38      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-38     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-38    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-39      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-39     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-39    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-40      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-40     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-40    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-12  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-41      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-41     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-41    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-42      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-42     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-42    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-43      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-43     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-43    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-13  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-44      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-44     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-44    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-45      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-45     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-45    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-46      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-46     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-46    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-14  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-47      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-47     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-47    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-48      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-48     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-48    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-49      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-49     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-49    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-15  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-50      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-50     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-50    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-51      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-51     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-51    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-52      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-52     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-52    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-16  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-53      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-53     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-53    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-54      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-54     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-54    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-55      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-55     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-55    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-17  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-56      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-56     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-56    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-57      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-57     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-57    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-58      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-58     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-58    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-18  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-59      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-59     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-59    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-60      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-60     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-60    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-61      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-61     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-61    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-19  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-62      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-62     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-62    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-63      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-63     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-63    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-64      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-64     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-64    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-20  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-65      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-65     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-65    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-66      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-66     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-66    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-67      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-67     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-67    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-21  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-68      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-68     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-68    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-69      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-69     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-69    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-70      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-70     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-70    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-22  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-71      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-71     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-71    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-72      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-72     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-72    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-73      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-73     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-73    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-23  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-74      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-74     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-74    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-75      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-75     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-75    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-76      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-76     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-76    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-24  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-77      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-77     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-77    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-78      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-78     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-78    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-79      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-79     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-79    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-25  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-80      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-80     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-80    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-81      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-81     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-81    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-82      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-82     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-82    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-26  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-83      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-83     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-83    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-84      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-84     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-84    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-85      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-85     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-85    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-27  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-86      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-86     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-86    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-87      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-87     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-87    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-88      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-88     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-88    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-28  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-89      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-89     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-89    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-90      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-90     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-90    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-91      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-91     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-91    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-29  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-92      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-92     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-92    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-93      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]       147,456
      BatchNorm-93     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-93    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-94      [[1, 1024, 16, 16]]   [1, 1024, 16, 16]      1,048,576
      BatchNorm-94     [[1, 1024, 16, 16]]   [1, 1024, 16, 16]        4,096
      ConvBNLayer-94    [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
    BottleneckBlock-30  [[1, 1024, 16, 16]]   [1, 1024, 16, 16]          0
        Conv2D-95      [[1, 1024, 16, 16]]   [1, 2048, 16, 16]      2,097,152
      BatchNorm-95     [[1, 2048, 16, 16]]   [1, 2048, 16, 16]        8,192
      ConvBNLayer-95    [[1, 1024, 16, 16]]   [1, 2048, 16, 16]          0
        Conv2D-96      [[1, 2048, 16, 16]]    [1, 2048, 8, 8]        589,824
      BatchNorm-96      [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-96    [[1, 2048, 16, 16]]    [1, 2048, 8, 8]           0
        Conv2D-97       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]       4,194,304
      BatchNorm-97      [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-97     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-98      [[1, 1024, 16, 16]]    [1, 2048, 8, 8]       2,097,152
      BatchNorm-98      [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-98    [[1, 1024, 16, 16]]    [1, 2048, 8, 8]           0
    BottleneckBlock-31  [[1, 1024, 16, 16]]    [1, 2048, 8, 8]           0
        Conv2D-99       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]       4,194,304
      BatchNorm-99      [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-99     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-100       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]        589,824
      BatchNorm-100     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-100    [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-101       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]       4,194,304
      BatchNorm-101     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-101    [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
    BottleneckBlock-32   [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-102       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]       4,194,304
      BatchNorm-102     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-102    [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-103       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]        589,824
      BatchNorm-103     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-103    [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
        Conv2D-104       [[1, 2048, 8, 8]]     [1, 2048, 8, 8]       4,194,304
      BatchNorm-104     [[1, 2048, 8, 8]]     [1, 2048, 8, 8]         8,192
      ConvBNLayer-104    [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
    BottleneckBlock-33   [[1, 2048, 8, 8]]     [1, 2048, 8, 8]           0
    AdaptiveAvgPool2D-1  [[1, 2048, 8, 8]]     [1, 2048, 1, 1]           0
        Linear-1           [[1, 2048]]           [1, 1000]          2,049,000
        ResNeXt-2       [[1, 3, 256, 256]]       [1, 1000]              0
        Dropout-1          [[1, 1000]]           [1, 1000]              0
        Linear-2           [[1, 1000]]             [1, 2]             2,002
    ===============================================================================
    Total params: 83,660,154
    Trainable params: 83,254,394
    Non-trainable params: 405,760
    -------------------------------------------------------------------------------
    Input size (MB): 0.75
    Forward/backward pass size (MB): 1024.04
    Params size (MB): 319.14
    Estimated Total Size (MB): 1343.93
    -------------------------------------------------------------------------------

    {'total_params': 83660154, 'trainable_params': 83254394}

預測

模型訓練好之后就可以開始預測

在使用帶有動量的 SGD 學習率優化器后訓練 5 個 epoch,在 valid_list 中已經可以達到 95.3%的準確率

epochs_num = 5 #迭代次數
# opt = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
opt = paddle.optimizer.Momentum(learning_rate=0.002, parameters=model.parameters(), weight_decay=0.005, momentum=0.9)
train_acc, train_loss, valid_acc = [], [], []
for pass_num in range(epochs_num):
    model.train() #訓練模式
    accs=[]
    for batch_id,data in enumerate(train_data_reader):
        images, labels = data
        predict = model(images)#預測
        loss=F.cross_entropy(predict,labels)
        avg_loss=paddle.mean(loss)
        acc=paddle.metric.accuracy(predict,labels)#計算精度
        accs.append(acc.numpy()[0])
        if batch_id % 20 == 0:
            print("epoch:{}, iter:{}, loss:{}, acc:{}".format(pass_num, batch_id, avg_loss.numpy(), acc.numpy()[0]))
        opt.clear_grad()
        avg_loss.backward()
        opt.step()

    print("train_pass:{}, train_loss:{}, train_acc:{}".format(pass_num, avg_loss.numpy(), np.mean(accs)))
    train_acc.append(np.mean(accs)), train_loss.append(avg_loss.numpy())
    ##得到驗證集的性能
    model.eval()
    val_accs=[]
    for batch_id,data in enumerate(test_data_reader):
            images, labels = data
            predict=model(images)#預測
            acc=paddle.metric.accuracy(predict,labels)#計算精度
            val_accs.append(acc.numpy()[0])
    print('val_acc={}'.format(np.mean(val_accs)))
    valid_acc.append(np.mean(val_accs))
paddle.save(model.state_dict(),'resnext101_64x4d')#保存模型
    epoch:0, iter:0, loss:[1.2695745], acc:0.5625
    epoch:0, iter:20, loss:[0.72218126], acc:0.78125
    epoch:0, iter:40, loss:[0.8521573], acc:0.625
    epoch:0, iter:60, loss:[0.9325488], acc:0.78125
    epoch:0, iter:80, loss:[0.43677044], acc:0.90625
    epoch:0, iter:100, loss:[0.37998652], acc:0.84375
    epoch:0, iter:120, loss:[0.17167747], acc:0.9375
    epoch:0, iter:140, loss:[0.13679577], acc:0.9375
    epoch:0, iter:160, loss:[0.27065688], acc:0.9375
    epoch:0, iter:180, loss:[0.27734363], acc:0.875
    epoch:0, iter:200, loss:[0.27193183], acc:0.90625
    train_pass:0, train_loss:[0.37479421], train_acc:0.8610276579856873
    val_acc=0.9120657444000244
    epoch:1, iter:0, loss:[0.29650056], acc:0.875
    epoch:1, iter:20, loss:[0.03968127], acc:0.96875
    epoch:1, iter:40, loss:[0.0579604], acc:0.96875
    epoch:1, iter:60, loss:[0.08308301], acc:0.96875
    epoch:1, iter:80, loss:[0.02734788], acc:1.0
    epoch:1, iter:100, loss:[0.04930278], acc:0.96875
    epoch:1, iter:120, loss:[0.08352702], acc:0.96875
    epoch:1, iter:140, loss:[0.180908], acc:0.96875
    epoch:1, iter:160, loss:[0.00271969], acc:1.0
    epoch:1, iter:180, loss:[0.23547903], acc:0.90625
    epoch:1, iter:200, loss:[0.02033656], acc:1.0
    train_pass:1, train_loss:[0.00160835], train_acc:0.9695011973381042
    val_acc=0.9362205266952515
    epoch:2, iter:0, loss:[0.06544636], acc:0.96875
    epoch:2, iter:20, loss:[0.06581119], acc:0.96875
    epoch:2, iter:40, loss:[0.00562927], acc:1.0
    epoch:2, iter:60, loss:[0.01040748], acc:1.0
    epoch:2, iter:80, loss:[0.03810382], acc:0.96875
    epoch:2, iter:100, loss:[0.01447718], acc:1.0
    epoch:2, iter:120, loss:[0.12421186], acc:0.96875
    epoch:2, iter:140, loss:[0.00112416], acc:1.0
    epoch:2, iter:160, loss:[0.003324], acc:1.0
    epoch:2, iter:180, loss:[0.01755645], acc:1.0
    epoch:2, iter:200, loss:[0.06159591], acc:0.96875
    train_pass:2, train_loss:[0.00045859], train_acc:0.990234375
    val_acc=0.9543269276618958
    epoch:3, iter:0, loss:[0.00377628], acc:1.0
    epoch:3, iter:20, loss:[0.0032537], acc:1.0
    epoch:3, iter:40, loss:[0.00095566], acc:1.0
    epoch:3, iter:60, loss:[0.1955388], acc:0.9375
    epoch:3, iter:80, loss:[0.00345089], acc:1.0
    epoch:3, iter:100, loss:[0.00279539], acc:1.0
    epoch:3, iter:120, loss:[0.01505984], acc:1.0
    epoch:3, iter:140, loss:[0.06922489], acc:0.96875
    epoch:3, iter:160, loss:[0.05011526], acc:0.96875
    epoch:3, iter:180, loss:[0.13640904], acc:0.96875
    epoch:3, iter:200, loss:[0.01501912], acc:1.0
    train_pass:3, train_loss:[0.00018014], train_acc:0.991135835647583
    val_acc=0.944672703742981
    epoch:4, iter:0, loss:[0.00011357], acc:1.0
    epoch:4, iter:20, loss:[0.00145513], acc:1.0
    epoch:4, iter:40, loss:[0.00594005], acc:1.0
    epoch:4, iter:60, loss:[0.00403259], acc:1.0
    epoch:4, iter:80, loss:[0.00525207], acc:1.0
    epoch:4, iter:100, loss:[0.01096269], acc:1.0
    epoch:4, iter:120, loss:[0.0166808], acc:1.0
    epoch:4, iter:140, loss:[0.00298717], acc:1.0
    epoch:4, iter:160, loss:[0.00306062], acc:1.0
    epoch:4, iter:180, loss:[0.0080948], acc:1.0
    epoch:4, iter:200, loss:[0.08889838], acc:0.9375
    train_pass:4, train_loss:[0.07838897], train_acc:0.9887319803237915
    val_acc=0.9530086517333984
from tqdm import tqdm

test=pd.read_csv("test.csv")
test["label"]=0
with tqdm(total=len(test)) as pbar:
    for i in range(len(test)):
        image_file=test["image_id"][i]
        pbar.set_description(f'Processing: {test["image_id"][i]}')
        img = Image.open(image_file)  # 讀取圖片
        img = img.resize((256, 256), Image.ANTIALIAS)  # 圖片大小樣式歸一化
        img = np.array(img).astype('float32')  # 轉換成陣列型別浮點型32位
        img = img.transpose((2, 0, 1))
        img = img/255.0  # 資料縮放到0-1的范圍
        img=paddle.to_tensor(img.reshape(-1,3,256,256))
        predict = model(img)
        result = int(np.argmax(predict.numpy()))
        test.loc[i, "image_id"]=test.loc[i, "image_id"][5:]
        test.loc[i, "label"]=result
        pbar.update(1)
test.to_csv('predict_result.csv', index=False)
print("end")
    Processing: test/yheWlrsgStOjfLdqHbYE7p1P28ViDBQ9.jpg: 100%|██████████| 1849/1849 [01:58<00:00, 15.65it/s]
    end

改進方向

  1. 可以在基線模型的基礎上通過調參及模型優化進一步提升效果
  2. 可以對訓練集進行資料增強從而增大訓練資料量以提升模型泛化能力
  3. 可以嘗試采用更深的神經網路,如 Resnet、VGG

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552021.html

標籤:其他

上一篇:【AIGC】Embedding與LLM的結合:長文本搜索與問答功能

下一篇:返回列表

標籤雲
其他(158728) Python(38124) JavaScript(25407) Java(18024) C(15222) 區塊鏈(8263) C#(7972) AI(7469) 爪哇(7425) MySQL(7172) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5336) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4570) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1965) Web開發(1951) HtmlCss(1932) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1875) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 別玩手機 影像分類比賽

    如今,手機已成為大眾離不開的生活工具,而且它的迅速發展使得它的功能不再以通訊為主,手機逐漸發展為可移動的大眾傳播媒體終端設備,甚至可以比作為第五媒體。當今的大學生群體是智能手機使用者中的一支巨大的的隊伍,零零后大學生在進入大學以來,學習生活中過度的依賴手機,甚至上課時忘記攜帶手機便會手足無措,神情恍... ......

    uj5u.com 2023-05-10 08:21:55 more
  • 【AIGC】Embedding與LLM的結合:長文本搜索與問答功能

    什么是Embedding? Embedding是一種多維向量陣列,由一系列數字組成,可以代表任何事物,如文本、音樂、視頻等。在這里我們將重點關注文本部分。Embedding之所以重要,是因為它讓我們可以進行語意搜索,也就是通過文本的含義進行相似性檢索。 為什么Embedding在AI中如此重要? E ......

    uj5u.com 2023-05-10 08:21:46 more
  • 百度飛槳(PaddlePaddle)-數字識別

    手寫數字識別任務 用于對 0 ~ 9 的十類數字進行分類,即輸入手寫數字的圖片,可識別出這個圖片中的數字。 使用 pip 工具安裝 matplotlib 和 numpy python -m pip install matplotlib numpy -i https://mirror.baidu.co ......

    uj5u.com 2023-05-10 08:21:35 more
  • LP三明治機器人

    2022 年 11 月 4 日,EigenPhi檢測到一種全新型別的三明治交易:一個三明治機器人擠壓了一筆增加流動性的交易,根據我們的常識,這很奇怪。這樣做有利可圖嗎?有什么限制嗎?與之前關于包括 37 筆交易的巨大三明治交易的文章不同,該機器人展示了一種截然不同的創新策略。而本文將帶你一探AMM旗 ......

    uj5u.com 2023-05-10 08:15:36 more
  • 你還在糾結怎么選IDE嗎?常用IDE工具分享

    近期有不少剛學編程的小伙伴來問我,市面上那么多IDE工具,該怎么選?今天在這里跟大家分享幾款個人比較鐘愛的IDE工具,供大家參考。 Visual Studio 優點:支持多種語言,包括C#, C++, Visual Basic等,可用于Web應用程式、桌面應用程式、移動應用程式等開發;集成了多種工具 ......

    uj5u.com 2023-05-10 08:10:08 more
  • 資料結構與演算法大作業:走迷宮程式(C語言,DFS)(代碼以及思路)

    好家伙,寫大作業,本篇為代碼的思路講解 1.大作業要求 走迷宮程式 問題描述: 以一個 m * n 的長方陣表示迷宮, 0和1分別表示迷宮的通路和障礙。 設計一個程式, 對任意設定的迷宮, 求出一條從入口到出口的通路, 或得出沒有通路的結論。 基本要求: (1) 實作一個以鏈表做存盤的堆疊型別, 然后 ......

    uj5u.com 2023-05-10 08:09:58 more
  • QUIC在京東直播的應用與實踐

    本文將分別從推流端、中臺源站、直播云CDN及播放端四個部分串燒式地介紹與直播相關的一些技術實踐,并重點介紹QUIC技術的應用情況及收益。 ......

    uj5u.com 2023-05-10 08:08:36 more
  • 1000個已成功入職的軟體測驗工程師簡歷經驗總結:軟體測驗工程師簡

    軟體測驗面試常見問題通常分為兩大類,一類是考察你的專業技能,另一類是考察你的穩定性、努力程度、情商等因素。并且所有初級測驗工程師的面試題中我發現超過90%都是基礎性的面試題,2020年只要掌握功能測驗和介面測驗,然后有一定的自動化基礎,再加上面試的時候態度ok(不卑不亢即可), 基本上在一線找一份薪... ......

    uj5u.com 2023-05-10 08:08:10 more
  • KubeEdge在邊緣計算領域的安全防護及洞察

    摘要:著重介紹Kubeedge在安全防護方面的實踐,并介紹OpenSSF在開源軟體安全方面的計劃與目標。 本文分享自華為云社區《KubeEdge在邊緣計算領域的安全防護及洞察》,作者:華為云云原生團隊。 隨著開源軟體安全漏洞持續引起世界各地政府和企業的關注,越來越多的組織、開發人員、研究人員和安全專 ......

    uj5u.com 2023-05-10 08:07:55 more
  • 使用 shell 腳本自動申請進京證 (六環外) —— debug 程序

    寫好的自動辦理六環外進京證腳本跑不通,總是回傳辦理業務人數較多 (500) 錯誤,Charles / VNET 抓包、android 交叉編譯 jq、升級 curl…都不起作用,最侄訓是神奇的 adb shell 幫了大忙,最后定位到根因,居然是用 shell 字串長度作為資料長度導致的,這錯誤犯... ......

    uj5u.com 2023-05-10 08:07:30 more