本项目基于paddlepaddle和VireoFood-172数据集,用ResNet模型分三段训练实现食品识别。经不同学习率多轮训练,ResNet152模型训练集正确率92.927%,测试集82.684%,后续将优化以提升精度。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

(2)对数据集进行解压
!unzip -q -o data/data124758/splitedDataset.zip
(3)对数据集进行处理
(4)引入项目必须的模块
import paddleimport numpy as npimport os
(5)利用生成器获得训练集和测试集
from dataset import FoodDataset
train_data = './train_data1.txt'validation_data = './valida_data1.txt'train_dataset = FoodDataset(train_data)
eval_dataset = FoodDataset(validation_data)print('train大小:', train_dataset.__len__())print('eval大小:', eval_dataset.__len__())# for data, label in train_dataset:# print(data)# print(np.array(data).shape)# print(label)# breaktrain大小: 88192 eval大小: 22049
class DenseFoodModel(paddle.nn.Layer):
def __init__(self):
super(DenseFoodModel, self).__init__()
self.num_labels = 172
def dense_block(self, x, blocks, name):
for i in range(blocks):
x = self.conv_block(x, 32, name=name + '_block' + str(i + 1)) return x def transition_block(self, x, reduction, name):
bn_axis = 3
x = paddle.nn.BatchNorm2D(num_features=x.shape[1], epsilon=1.001e-5)(x)
x = paddle.nn.ELU(name=name + '_elu')(x)
x = paddle.nn.Conv2D(in_channels=x.shape[1], out_channels=int(x.shape[1] * reduction),
kernel_size=1, bias_attr=False)(x)
x = paddle.nn.MaxPool2D(kernel_size=2, stride=2, name=name + '_pool')(x) return x def conv_block(self, x, growth_rate, name):
bn_axis = 3
x1 = paddle.nn.BatchNorm2D(num_features=x.shape[1], epsilon=1.001e-5)(x)
x1 = paddle.nn.ELU(name=name + '_0_elu')(x1)
x1 = paddle.nn.Conv2D(in_channels=x1.shape[1], out_channels=4 * growth_rate, kernel_size= 1, bias_attr=False)(x1)
x1 = paddle.nn.BatchNorm2D(num_features=x1.shape[1], epsilon=1.001e-5)(x1)
x1 = paddle.nn.ELU(name=name + '_1_elu')(x1)
x1 = paddle.nn.Conv2D(in_channels=x1.shape[1], out_channels=growth_rate, kernel_size=3, padding='SAME',
bias_attr=False)(x1) # x = np.concatenate(([x, x1]), axis=1)
# x = paddle.to_tensor(x)
x = paddle.concat(x=[x, x1], axis=1) return x def forward(self, input):
# img_input = paddle.reshape(input, shape=[-1, 3, 224, 224]) # 转换维读
bn_axis = 3
x = paddle.nn.Conv2D(in_channels=3, out_channels=64, kernel_size=7, stride=2, bias_attr=False, padding=3)(input)
x = paddle.nn.BatchNorm2D(
num_features=64, epsilon=1.001e-5)(x)
x = paddle.nn.ELU(name='conv1/elu')(x)
x = paddle.nn.MaxPool2D(kernel_size=3, stride=2, name='pool1', padding=1)(x)
x = self.dense_block(x, 6, name='conv2')
x = self.transition_block(x, 0.5, name='pool2')
x = self.dense_block(x, 12, name='conv3')
x = self.transition_block(x, 0.5, name='pool3')
x = self.dense_block(x, 24, name='conv4')
x = self.transition_block(x, 0.5, name='pool4')
x = self.dense_block(x, 16, name='conv5')
x = paddle.nn.BatchNorm2D(
num_features=x.shape[1], epsilon=1.001e-5)(x)
x = paddle.nn.ELU(name='elu')(x)
x = paddle.nn.AdaptiveAvgPool2D(output_size=1)(x)
x = paddle.squeeze(x, axis=[2, 3])
x = paddle.nn.Linear(in_features=1024, out_features=173)(x)
x = F.softmax(x) return ximport paddle.nn.functional as F model = paddle.Model(DenseFoodModel()) model.summary((-1, ) + tuple([3, 224, 224]))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/norm.py:653: UserWarning: When training, we now always track global mean and variance. "When training, we now always track global mean and variance.")
---------------------------------------------------------------------------- Layer (type) Input Shape Output Shape Param # ============================================================================ DenseFoodModel-1 [[1, 3, 224, 224]] [1, 173] 0 ============================================================================ Total params: 0 Trainable params: 0 Non-trainable params: 0 ---------------------------------------------------------------------------- Input size (MB): 0.57 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.58 ----------------------------------------------------------------------------
{'total_params': 0, 'trainable_params': 0}Step2.网络配置
(1)网络搭建
x为残差块的输入,然后复制成两部分,一部分输入到层(weight layer)之中,进行层间的运算(相当于将x输入到一个函数中做映射),结果为f(x);另一部分作为分支结构,输出还是原本的x,最后将分别两部分的输出进行叠加:f(x) + x,再通过激活函数。这便是整个残差块的基本结构。
下图是每种ResNet的具体结构:
这里介绍一下ResNet152,152是指152次卷积。
其中block共有3+8+36+3 = 50个,每个block是由3层卷积构成的,共150个卷积,最开始的一个卷积是将3通道的图片提取特征,最后一层是自适应平均池化,输出维度为1。
一开始选用的是ResNet50图像分类模型,但是在进行了100多轮迭代训练后,正确率只能维持在88%左右,因此我们尝试变换模型重新进行训练,选用了ResNet101模型和ResNet152模型分别进行100轮迭代训练,最终,ResNet101模型的训练集正确率88%,测试集正确率80%,ResNet152模型训练集正确率达到了92%,测试集正确率达到了82%。
network = paddle.vision.models.resnet152(num_classes=173, pretrained=True) model = paddle.Model(network) model.summary((-1, ) + tuple([3, 224, 224]))
100%|██████████| 355826/355826 [00:09<00:00, 38920.04it/s]
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1441: UserWarning: Skip loading for fc.weight. fc.weight receives a shape [2048, 1000], but the expected shape is [2048, 173].
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1441: UserWarning: Skip loading for fc.bias. fc.bias receives a shape [1000], but the expected shape is [173].
warnings.warn(("Skip loading for {}. ".format(key) + str(err)))-------------------------------------------------------------------------------
Layer (type) Input Shape Output Shape Param #
===============================================================================
Conv2D-1 [[1, 3, 224, 224]] [1, 64, 112, 112] 9,408
BatchNorm2D-1 [[1, 64, 112, 112]] [1, 64, 112, 112] 256
ReLU-1 [[1, 64, 112, 112]] [1, 64, 112, 112] 0
MaxPool2D-1 [[1, 64, 112, 112]] [1, 64, 56, 56] 0
Conv2D-3 [[1, 64, 56, 56]] [1, 64, 56, 56] 4,096
BatchNorm2D-3 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
ReLU-2 [[1, 256, 56, 56]] [1, 256, 56, 56] 0
Conv2D-4 [[1, 64, 56, 56]] [1, 64, 56, 56] 36,864
BatchNorm2D-4 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
Conv2D-5 [[1, 64, 56, 56]] [1, 256, 56, 56] 16,384
BatchNorm2D-5 [[1, 256, 56, 56]] [1, 256, 56, 56] 1,024
Conv2D-2 [[1, 64, 56, 56]] [1, 256, 56, 56] 16,384
BatchNorm2D-2 [[1, 256, 56, 56]] [1, 256, 56, 56] 1,024
BottleneckBlock-1 [[1, 64, 56, 56]] [1, 256, 56, 56] 0
Conv2D-6 [[1, 256, 56, 56]] [1, 64, 56, 56] 16,384
BatchNorm2D-6 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
ReLU-3 [[1, 256, 56, 56]] [1, 256, 56, 56] 0
Conv2D-7 [[1, 64, 56, 56]] [1, 64, 56, 56] 36,864
BatchNorm2D-7 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
Conv2D-8 [[1, 64, 56, 56]] [1, 256, 56, 56] 16,384
BatchNorm2D-8 [[1, 256, 56, 56]] [1, 256, 56, 56] 1,024
BottleneckBlock-2 [[1, 256, 56, 56]] [1, 256, 56, 56] 0
Conv2D-9 [[1, 256, 56, 56]] [1, 64, 56, 56] 16,384
BatchNorm2D-9 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
ReLU-4 [[1, 256, 56, 56]] [1, 256, 56, 56] 0
Conv2D-10 [[1, 64, 56, 56]] [1, 64, 56, 56] 36,864
BatchNorm2D-10 [[1, 64, 56, 56]] [1, 64, 56, 56] 256
Conv2D-11 [[1, 64, 56, 56]] [1, 256, 56, 56] 16,384
BatchNorm2D-11 [[1, 256, 56, 56]] [1, 256, 56, 56] 1,024
BottleneckBlock-3 [[1, 256, 56, 56]] [1, 256, 56, 56] 0
Conv2D-13 [[1, 256, 56, 56]] [1, 128, 56, 56] 32,768
BatchNorm2D-13 [[1, 128, 56, 56]] [1, 128, 56, 56] 512
ReLU-5 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-14 [[1, 128, 56, 56]] [1, 128, 28, 28] 147,456
BatchNorm2D-14 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-15 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-15 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
Conv2D-12 [[1, 256, 56, 56]] [1, 512, 28, 28] 131,072
BatchNorm2D-12 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-4 [[1, 256, 56, 56]] [1, 512, 28, 28] 0
Conv2D-16 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-16 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-6 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-17 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-17 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-18 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-18 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-5 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-19 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-19 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-7 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-20 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-20 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-21 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-21 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-6 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-22 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-22 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-8 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-23 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-23 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-24 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-24 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-7 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-25 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-25 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-9 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-26 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-26 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-27 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-27 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-8 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-28 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-28 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-10 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-29 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-29 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-30 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-30 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-9 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-31 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-31 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-11 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-32 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-32 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-33 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-33 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-10 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-34 [[1, 512, 28, 28]] [1, 128, 28, 28] 65,536
BatchNorm2D-34 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
ReLU-12 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-35 [[1, 128, 28, 28]] [1, 128, 28, 28] 147,456
BatchNorm2D-35 [[1, 128, 28, 28]] [1, 128, 28, 28] 512
Conv2D-36 [[1, 128, 28, 28]] [1, 512, 28, 28] 65,536
BatchNorm2D-36 [[1, 512, 28, 28]] [1, 512, 28, 28] 2,048
BottleneckBlock-11 [[1, 512, 28, 28]] [1, 512, 28, 28] 0
Conv2D-38 [[1, 512, 28, 28]] [1, 256, 28, 28] 131,072
BatchNorm2D-38 [[1, 256, 28, 28]] [1, 256, 28, 28] 1,024
ReLU-13 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-39 [[1, 256, 28, 28]] [1, 256, 14, 14] 589,824
BatchNorm2D-39 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-40 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-40 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
Conv2D-37 [[1, 512, 28, 28]] [1, 1024, 14, 14] 524,288
BatchNorm2D-37 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-12 [[1, 512, 28, 28]] [1, 1024, 14, 14] 0
Conv2D-41 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-41 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-14 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-42 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-42 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-43 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-43 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-13 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-44 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-44 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-15 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-45 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-45 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-46 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-46 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-14 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-47 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-47 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-16 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-48 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-48 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-49 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-49 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-15 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-50 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-50 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-17 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-51 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-51 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-52 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-52 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-16 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-53 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-53 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-18 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-54 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-54 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-55 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-55 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-17 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-56 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-56 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-19 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-57 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-57 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-58 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-58 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-18 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-59 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-59 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-20 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-60 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-60 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-61 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-61 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-19 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-62 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-62 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-21 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-63 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-63 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-64 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-64 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-20 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-65 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-65 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-22 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-66 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-66 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-67 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-67 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-21 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-68 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-68 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-23 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-69 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-69 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-70 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-70 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-22 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-71 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-71 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-24 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-72 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-72 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-73 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-73 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-23 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-74 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-74 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-25 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-75 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-75 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-76 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-76 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-24 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-77 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-77 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-26 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-78 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-78 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-79 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-79 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-25 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-80 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-80 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-27 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-81 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-81 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-82 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-82 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-26 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-83 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-83 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-28 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-84 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-84 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-85 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-85 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-27 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-86 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-86 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-29 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-87 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-87 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-88 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-88 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-28 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-89 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-89 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-30 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-90 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-90 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-91 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-91 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-29 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-92 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-92 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-31 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-93 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-93 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-94 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-94 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-30 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-95 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-95 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-32 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-96 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-96 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-97 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-97 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-31 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-98 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-98 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-33 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-99 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-99 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-100 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-100 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-32 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-101 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-101 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-34 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-102 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-102 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-103 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-103 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-33 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-104 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-104 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-35 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-105 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-105 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-106 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-106 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-34 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-107 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-107 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-36 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-108 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-108 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-109 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-109 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-35 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-110 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-110 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-37 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-111 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-111 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-112 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-112 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-36 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-113 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-113 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-38 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-114 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-114 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-115 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-115 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-37 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-116 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-116 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-39 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-117 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-117 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-118 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-118 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-38 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-119 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-119 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-40 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-120 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-120 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-121 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-121 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-39 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-122 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-122 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-41 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-123 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-123 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-124 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-124 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-40 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-125 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-125 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-42 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-126 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-126 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-127 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-127 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-41 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-128 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-128 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-43 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-129 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-129 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-130 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-130 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-42 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-131 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-131 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-44 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-132 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-132 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-133 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-133 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-43 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-134 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-134 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-45 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-135 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-135 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-136 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-136 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-44 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-137 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-137 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-46 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-138 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-138 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-139 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-139 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-45 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-140 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-140 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-47 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-141 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-141 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-142 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-142 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-46 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-143 [[1, 1024, 14, 14]] [1, 256, 14, 14] 262,144
BatchNorm2D-143 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
ReLU-48 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-144 [[1, 256, 14, 14]] [1, 256, 14, 14] 589,824
BatchNorm2D-144 [[1, 256, 14, 14]] [1, 256, 14, 14] 1,024
Conv2D-145 [[1, 256, 14, 14]] [1, 1024, 14, 14] 262,144
BatchNorm2D-145 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 4,096
BottleneckBlock-47 [[1, 1024, 14, 14]] [1, 1024, 14, 14] 0
Conv2D-147 [[1, 1024, 14, 14]] [1, 512, 14, 14] 524,288
BatchNorm2D-147 [[1, 512, 14, 14]] [1, 512, 14, 14] 2,048
ReLU-49 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 0
Conv2D-148 [[1, 512, 14, 14]] [1, 512, 7, 7] 2,359,296
BatchNorm2D-148 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,048
Conv2D-149 [[1, 512, 7, 7]] [1, 2048, 7, 7] 1,048,576
BatchNorm2D-149 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 8,192
Conv2D-146 [[1, 1024, 14, 14]] [1, 2048, 7, 7] 2,097,152
BatchNorm2D-146 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 8,192
BottleneckBlock-48 [[1, 1024, 14, 14]] [1, 2048, 7, 7] 0
Conv2D-150 [[1, 2048, 7, 7]] [1, 512, 7, 7] 1,048,576
BatchNorm2D-150 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,048
ReLU-50 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 0
Conv2D-151 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,359,296
BatchNorm2D-151 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,048
Conv2D-152 [[1, 512, 7, 7]] [1, 2048, 7, 7] 1,048,576
BatchNorm2D-152 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 8,192
BottleneckBlock-49 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 0
Conv2D-153 [[1, 2048, 7, 7]] [1, 512, 7, 7] 1,048,576
BatchNorm2D-153 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,048
ReLU-51 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 0
Conv2D-154 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,359,296
BatchNorm2D-154 [[1, 512, 7, 7]] [1, 512, 7, 7] 2,048
Conv2D-155 [[1, 512, 7, 7]] [1, 2048, 7, 7] 1,048,576
BatchNorm2D-155 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 8,192
BottleneckBlock-50 [[1, 2048, 7, 7]] [1, 2048, 7, 7] 0
AdaptiveAvgPool2D-1 [[1, 2048, 7, 7]] [1, 2048, 1, 1] 0
Linear-1 [[1, 2048]] [1, 173] 354,477
===============================================================================
Total params: 58,649,709
Trainable params: 58,346,861
Non-trainable params: 302,848
-------------------------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 552.42
Params size (MB): 223.73
Estimated Total Size (MB): 776.72
-------------------------------------------------------------------------------{'total_params': 58649709, 'trainable_params': 58346861}Step3.训练模型与训练评估
分为三段式来训练样本:
训练集:loss迅速下降,正确率经过二十轮迭代上升至0.80929
测试集:loss迅速下降,正确率迅速上升至0.7384
训练集:loss震荡下降,正确率从0.80929上升至0.85714
loss震荡,正确率从0.7384上升至0.7592
训练集:loss震荡下降,正确率从0.85714上升至0.92927
测试集:正确率趋于平稳,正确率取最高值0.82684,即第7个epoch
考虑到训练集持续上升而测试集接近收敛,继续训练会导致过拟合,故训练到此结束。
model.prepare(optimizer=paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()),
loss=paddle.nn.CrossEntropyLoss(),
metrics=paddle.metric.Accuracy())# 训练可视化VisualDL工具的回调函数visualdl = paddle.callbacks.VisualDL(log_dir='visualdl_log')# 启动模型全流程训练model.fit(train_dataset, # 训练数据集
eval_dataset, # 评估数据集
epochs=20, # 总的训练轮次
batch_size=64, # 批次计算的样本量大小
shuffle=True, # 是否打乱样本集
verbose=1, # 日志展示格式
save_dir='0_20_resnet152_0.001', # 分阶段的训练模型存储路径
callbacks=[visualdl]) # 回调函数使用The loss value printed in the log is the current step, and the metric is the average value of previous steps. Epoch 1/20 step 1378/1378 [==============================] - loss: 2.0446 - acc: 0.2861 - 538ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/0 Eval begin... step 345/345 [==============================] - loss: 1.2795 - acc: 0.3776 - 256ms/step Eval samples: 22049 Epoch 2/20 step 1378/1378 [==============================] - loss: 1.5286 - acc: 0.5133 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/1 Eval begin... step 345/345 [==============================] - loss: 0.7893 - acc: 0.5104 - 239ms/step Eval samples: 22049 Epoch 3/20 step 1378/1378 [==============================] - loss: 1.1590 - acc: 0.5851 - 524ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/2 Eval begin... step 345/345 [==============================] - loss: 0.6739 - acc: 0.5879 - 240ms/step Eval samples: 22049 Epoch 4/20 step 1378/1378 [==============================] - loss: 1.1931 - acc: 0.6275 - 522ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/3 Eval begin... step 345/345 [==============================] - loss: 0.2853 - acc: 0.6071 - 237ms/step Eval samples: 22049 Epoch 5/20 step 1378/1378 [==============================] - loss: 1.3321 - acc: 0.6558 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/4 Eval begin... step 345/345 [==============================] - loss: 0.5777 - acc: 0.6388 - 242ms/step Eval samples: 22049 Epoch 6/20 step 1378/1378 [==============================] - loss: 1.4460 - acc: 0.6820 - 524ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/5 Eval begin... step 345/345 [==============================] - loss: 0.5820 - acc: 0.6541 - 244ms/step Eval samples: 22049 Epoch 7/20 step 1378/1378 [==============================] - loss: 1.0251 - acc: 0.6960 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/6 Eval begin... step 345/345 [==============================] - loss: 0.3825 - acc: 0.6865 - 239ms/step Eval samples: 22049 Epoch 8/20 step 1378/1378 [==============================] - loss: 0.8302 - acc: 0.7145 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/7 Eval begin... step 345/345 [==============================] - loss: 0.0702 - acc: 0.6644 - 240ms/step Eval samples: 22049 Epoch 9/20 step 1378/1378 [==============================] - loss: 1.0031 - acc: 0.7274 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/8 Eval begin... step 345/345 [==============================] - loss: 0.3258 - acc: 0.6950 - 240ms/step Eval samples: 22049 Epoch 10/20 step 1378/1378 [==============================] - loss: 0.9562 - acc: 0.7366 - 522ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/9 Eval begin... step 345/345 [==============================] - loss: 0.2758 - acc: 0.7111 - 240ms/step Eval samples: 22049 Epoch 11/20 step 1378/1378 [==============================] - loss: 0.9920 - acc: 0.7492 - 524ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/10 Eval begin... step 345/345 [==============================] - loss: 0.1771 - acc: 0.7077 - 240ms/step Eval samples: 22049 Epoch 12/20 step 1378/1378 [==============================] - loss: 0.8259 - acc: 0.7558 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/11 Eval begin... step 345/345 [==============================] - loss: 0.1928 - acc: 0.7075 - 241ms/step Eval samples: 22049 Epoch 13/20 step 1378/1378 [==============================] - loss: 0.8234 - acc: 0.7649 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/12 Eval begin... step 345/345 [==============================] - loss: 0.4049 - acc: 0.7215 - 243ms/step Eval samples: 22049 Epoch 14/20 step 1378/1378 [==============================] - loss: 0.7254 - acc: 0.7730 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/13 Eval begin... step 345/345 [==============================] - loss: 0.3297 - acc: 0.7173 - 239ms/step Eval samples: 22049 Epoch 15/20 step 1378/1378 [==============================] - loss: 0.7475 - acc: 0.7817 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/14 Eval begin... step 345/345 [==============================] - loss: 0.1445 - acc: 0.7199 - 240ms/step Eval samples: 22049 Epoch 16/20 step 1378/1378 [==============================] - loss: 0.7856 - acc: 0.7905 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/15 Eval begin... step 345/345 [==============================] - loss: 0.3110 - acc: 0.7332 - 238ms/step Eval samples: 22049 Epoch 17/20 step 1378/1378 [==============================] - loss: 1.0853 - acc: 0.7945 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/16 Eval begin... step 345/345 [==============================] - loss: 0.2105 - acc: 0.7461 - 240ms/step Eval samples: 22049 Epoch 18/20 step 1378/1378 [==============================] - loss: 1.1084 - acc: 0.8027 - 523ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/17 Eval begin... step 345/345 [==============================] - loss: 0.1809 - acc: 0.7313 - 241ms/step Eval samples: 22049 Epoch 19/20 step 1378/1378 [==============================] - loss: 1.1126 - acc: 0.8079 - 525ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/18 Eval begin... step 345/345 [==============================] - loss: 0.0287 - acc: 0.7268 - 241ms/step Eval samples: 22049 Epoch 20/20 step 1378/1378 [==============================] - loss: 0.6276 - acc: 0.8125 - 524ms/step save checkpoint at /home/aistudio/0_20_resnet152_0.001/19 Eval begin... step 345/345 [==============================] - loss: 0.2583 - acc: 0.7326 - 240ms/step Eval samples: 22049 save checkpoint at /home/aistudio/0_20_resnet152_0.001/final
# visualdl --logdir=visualdl_log/ --port=8040# 终端运行此代码
model.save('infer/mnist',training=False) # 保存模型Step5.模型预测
from PIL import Imageimport paddle.vision.transforms as T
model_state_dict = paddle.load('50epoches_chk/final.pdparams') # 读取模型model = paddle.vision.models.resnet50(num_classes=173)
model.set_state_dict(model_state_dict)
model.eval()
image_file = './splitedDataset/train/108/5_41.jpg'# image_file = './splitedDataset/Yu-Shiang Shredded Pork.webp'# braised pork in brown sauce.jfif \ 1.webp \ rice.jfif \ Yu-Shiang Shredded Pork.webptransforms = T.Compose([
T.RandomResizedCrop((224, 224)), # 随机裁剪大小,裁剪地方不同等于间接增加了数据样本 300*300-224*224
T.ToTensor(), # 数据的格式转换和标准化 HWC => CHW
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 图像归一化])
img = Image.open(image_file) # 读取图片if img.mode != 'RGB':
img = img.convert('RGB')
img = transforms(img)
img = paddle.unsqueeze(img, axis=0)
foodLabel = './FoodList.txt'foodList = []with open(foodLabel) as f: for line in f.readlines():
info = line.split('\t') if len(info) > 0:
foodList.append(info)
ceshi = model(img) # 测试print('预测的结果为:', np.argmax(ceshi.numpy()), foodList[np.argmax(ceshi.numpy())-1]) # 获取值Image.open(image_file) # 显示图片预测的结果为: 108 ['Four-Joy Meatballs\n']
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=224x224 at 0x7FAC889342D0>
断点续训:
在训练初期,希望训练速度快,使用0.01的学习率。在此基础上需要更小的学习率继续训练,以获得更准确的正确率。
import paddle.vision.transforms as Timport paddlefrom dataset import FoodDataset
train_data = './train_data1.txt'validation_data = './valida_data1.txt'train_dataset = FoodDataset(train_data)
eval_dataset = FoodDataset(validation_data)
network = paddle.vision.models.resnet101(num_classes=173)
params_dict = paddle.load('15_15_resnet101_0.0001/final.pdparams')
network.set_state_dict(params_dict)
model = paddle.Model(network)
opt = paddle.optimizer.Adam(learning_rate=0.0001, parameters=model.parameters())
opt_dict = paddle.load('15_15_resnet101_0.0001/final.pdopt')
opt.set_state_dict(opt_dict)
model.prepare(optimizer=opt,
loss=paddle.nn.CrossEntropyLoss(),
metrics=paddle.metric.Accuracy())# 训练可视化VisualDL工具的回调函数visualdl = paddle.callbacks.VisualDL(log_dir='visualdl_log')# 启动模型全流程训练model.fit(train_dataset, # 训练数据集
eval_dataset, # 评估数据集
epochs=25, # 总的训练轮次
batch_size=64, # 批次计算的样本量大小
shuffle=True, # 是否打乱样本集
verbose=1, # 日志展示格式
save_dir='30_25_resnet101', # 分阶段的训练模型存储路径
callbacks=[visualdl]) # 回调函数使用W0129 23:08:45.468212 6682 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1 W0129 23:08:45.472950 6682 device_context.cc:465] device: 0, cuDNN Version: 7.6.
The loss value printed in the log is the current step, and the metric is the average value of previous steps. Epoch 1/25
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:77: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working return (isinstance(seq, collections.Sequence) and /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/norm.py:653: UserWarning: When training, we now always track global mean and variance. "When training, we now always track global mean and variance.")
step 30/1378 [..............................] - loss: 0.4691 - acc: 0.8672 - ETA: 10:18 - 459ms/st
以上就是基于ResNet-152模型的172种食物图像分类(教育部产学合作协同育人项目)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号