p1206802323 2022-12-28 19:50 采纳率: 77.8%
浏览 21
已结题

深度学习矩阵怎么和整数相除

我这个测试集精度只有0或者100非常奇怪,用的是tesorflow2.0的版本,torch用的是1.1的版本

import torch
import torch.nn as nn
from net import vgg16
from torch.utils.data import DataLoader
from data import *
'''数据集'''
annotation_path='cls_train.txt'
with open(annotation_path,'r') as f:
    lines=f.readlines()
np.random.seed(10101)
np.random.shuffle(lines)#打乱数据
np.random.seed(None)
num_val=int(len(lines)*0.1)
num_train=len(lines)-num_val
#输入图像大小
input_shape=[224,224]
train_data=DataGenerator(lines[:num_train],input_shape,True)
val_data=DataGenerator(lines[num_train:],input_shape,False)
val_len=len(val_data)
"""加载数据"""
gen_train=DataLoader(train_data,batch_size=5)
gen_test=DataLoader(val_data,batch_size=5)
'''构建网络'''
device=torch.device('cuda'if torch.cuda.is_available() else "cpu")
net=vgg16(pretrained=True, progress=True,num_classes=2)
net.to(device)
'''选择优化器和学习率的调整方法'''
lr=0.0001
optim=torch.optim.Adam(net.parameters(),lr=lr)
sculer=torch.optim.lr_scheduler.StepLR(optim,step_size=1)
'''训练'''
epochs=50
for epoch in range(epochs):
    total_train=0
    for data in gen_train:
        img,label=data
        with torch.no_grad():
            img =img.to(device)
            label=label.to(device)
        optim.zero_grad()
        output=net(img)
        train_loss=nn.CrossEntropyLoss()(output,label).to(device)
        train_loss.backward()
        optim.step()
        total_train+=train_loss
    sculer.step()
    total_test=0
    total_accuracy=0
    for data in gen_test:
        img,label =data
        with torch.no_grad():
            img=img.to(device)
            label=label.to(device)
            optim.zero_grad()
            out=net(img)
            test_loss=nn.CrossEntropyLoss()(out,label).to(device)
            total_test+=test_loss
            accuracy=(out.argmax(1)==label).sum()
            total_accuracy+=accuracy
    print("训练集上的损失:{}".format(total_train))
    print("测试集上的损失:{}".format(total_test))
    print("测试集上的精度:{:.1%}".format(total_accuracy/val_len))
    # torch.save(net,"dogandcat.{}.pt".format(epoch+1))
    torch.save(net.state_dict(),"Adogandcat.{}.pth".format(epoch+1))
    print("模型已保存")
    print(total_accuracy)
    print(val_len)

img

  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-28 20:17
    关注

    一些建议:
    1、确保数据集是有效的,并且足够大以表示问题。如果数据集过小,就模型可能无法学习有效的表示,并且结果可能是不稳定的。

    2、确保数据集是有偏差的,这意味着它应该代表想要模型预测的类别的比例。如果数据集中的某些类别的数据过少,就模型可能无法学习有效的表示,并且可能会产生偏差。

    3、确保数据集是平衡的,这意味着它应该在所有类别之间平均分布。如果数据集中的某些类别的数据过多,就模型可能会偏向于预测这些类别,导致精度较低。

    4、确保模型的结构是合理的,并且已经调整了超参数(例如学习率,权重衰减等)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录