对以下代码进行修改使其有更多的评判标准如正确率等给出修改后的代码# 调用resnet50模型paddlevisionset_image_backendcv2model = paddlevisionmodelsresnet50pretrained=True num_classes=12# 定义数据迭代器train_dataloader = DataLoadertrain_data batch_siz
调用resnet50模型
import paddle.vision as vision import paddle.nn as nn paddle.vision.set_image_backend('cv2') model = vision.models.resnet50(pretrained=True, num_classes=12)
定义数据迭代器
train_dataloader = DataLoader(train_data, batch_size=256, shuffle=True, drop_last=False) valid_dataloader = DataLoader(valid_data, batch_size=256, shuffle=False, drop_last=False)
定义优化器
optimizer = paddle.optimizer.Adam(learning_rate=1e-4, parameters=model.parameters(), weight_decay=paddle.regularizer.L2Decay(1e-4))
定义损失函数
criterion = nn.CrossEntropyLoss()
设置gpu环境
paddle.set_device('gpu')
整体训练流程
for epoch_id in range(15): model.train() for batch_id, data in enumerate(train_dataloader()): # 读取数据 features, labels = data features = paddle.to_tensor(features) labels = paddle.to_tensor(labels)
# 前向传播
predicts = model(features)
# 损失计算
loss = criterion(predicts, labels)
# 反向传播
loss.backward()
# 更新
optimizer.step()
# 清零梯度
optimizer.clear_grad()
# 打印训练损失
if batch_id % 10 == 0:
print('epoch_id:{}, batch_id:{}, loss:{}'.format(epoch_id, batch_id, loss.numpy()[0]))
# 每个epoch评估一次模型性能
model.eval()
acc = 0
total = 0
with paddle.no_grad():
for data in valid_dataloader():
images, labels = data
logits = model(images)
pred = paddle.argmax(logits, axis=1)
acc += paddle.sum(pred == labels)
total += len(labels)
accuracy = acc / total
print('epoch_id:{}, accuracy:{}'.format(epoch_id, accuracy))
# 保存最佳模型
if accuracy > best_acc:
best_acc = accuracy
paddle.save(model.state_dict(), 'best_model.pdparams'
原文地址: https://www.cveoy.top/t/topic/hliV 著作权归作者所有。请勿转载和采集!