【AI达人养成营】学习心得关于柠檬分类
收藏
本文主要记录我在做柠檬分类大作业时遇到的问题以及解决的过程和思路(解决方法肯定不是最好的,也希望大佬可以指点指点)
- 第一步调试代码
- 发现MobileNetV2网络没有定义,然后去paddle的api查看发现应该改成#from paddle.vision.models import MobileNetV2
- 继续调试代码,发现class_dim = 4在_init()_中没有定义
- 开始不知道class_dim是干什么的就直接去掉发现这条过了
- 继续运行代码遇到新的错误,维度不匹配
- 查阅资料加百度加问群内大佬
- 最后根据蝴蝶分类作业的启发,重写了一个MyNN,然后将最后一层的默认维度修改成了4
- 成功跑通代码
- 不断调参
- 得到最终结果高达0.99(当然只是验证集上的结果,如果有测试集的话效果可能会差很多)
由于前面大部分代码没有过多改动,现附上主要部分代码:
class MyNN(paddle.nn.Layer):
def __init__(self):
super(MyNN,self).__init__()
self.layer=paddle.vision.models.MobileNetV2(scale=1.0, num_classes=4, with_pool=True)
def forward(self,x):
x=self.layer(x)
return x
#from work.mobilenet import MobileNetV2
#from paddle.vision.models import MobileNetV2
#定义输入
input_define = paddle.static.InputSpec(shape=[-1,3,224,224],dtype="float32",name="img")
label_define = paddle.static.InputSpec(shape=[-1,4],dtype="int64",name="label")
# 模型封装
model_res = MyNN()
model = paddle.Model(model_res,inputs=input_define,labels=label_define)
model.summary((1,3, 224, 224))
# 定义优化器
scheduler = paddle.optimizer.lr.LinearWarmup(
learning_rate=0.1, warmup_steps=20, start_lr=0, end_lr=0.1, verbose=True)
optim = paddle.optimizer.SGD(learning_rate=scheduler, parameters=model.parameters())
# optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
# 配置模型
model.prepare(
optim,
paddle.nn.CrossEntropyLoss(soft_label=True),
Accuracy()
)
# 模型训练与评估
model.fit(train_loader,
val_loader,
log_freq=100,
epochs=50,
#callbacks=Callbk(write=write, iters=iters),
verbose=1,
batch_size=64,
)
0
收藏
请登录后评论