paddlepaddle使用心得系列(二)

1.今天用AI studio的notebook来训练模型,一直提示内存溢出,改了batchsize也不行,减少数据读取,也不奏效,原来是多线程的问题,具体解答在此

2.在paddlepaddle学习过程中遇到了一个小问题,关于python的,一直没学会这个,在此记录一下,是关于训练loss用plt显示的代码

plot_x = np.arange(MAX_EPOCH)  # 横坐标,是训练轮数
plot_y = np.array(losses_train)  # train时得到的loss,是一个list
plt.plot(plot_x, plot_y)
plt.show()  # 显示

3.训练轮数的计算
分为外层循环和内层循环,内层循环每一个循环遍历的是数据集的一部分,即batch,外层循环是遍历所有的batch,将数据打乱之后对整个数据集训练,所以外层循环的轮数才是平常说的epoch
#在使用GPU机器时,可以将use_gpu变量设置成True

use_gpu = False  # 使用cpu环境
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()

with fluid.dygraph.guard(place):
    model = MNIST()
    model.train() 
    
    EPOCH_NUM = 5  # 训练轮数,外层循环
    BATCH_SIZE = 100  # batch数,内层循环数=数据集数量/batch数
    # 定义学习率,并加载优化器参数到模型中
    total_steps = (int(60000//BATCH_SIZE) + 1) * EPOCH_NUM
    lr = fluid.dygraph.PolynomialDecay(0.01, total_steps, 0.001)
    
    # 使用Adam优化器
    optimizer = fluid.optimizer.AdamOptimizer(learning_rate=lr, parameter_list=model.parameters())
    
    for epoch_id in range(EPOCH_NUM):
    	# train_loader()得到的是分割好的数据集(batch)
        for batch_id, data in enumerate(train_loader()):
            #准备数据,变得更加简洁
            image_data, label_data = data
            image = fluid.dygraph.to_variable(image_data)
            label = fluid.dygraph.to_variable(label_data)
            
            #前向计算的过程,同时拿到模型输出值和分类准确率
            predict, acc = model(image, label)
            avg_acc = fluid.layers.mean(acc)
            
            #计算损失,取一个批次样本损失的平均值
            loss = fluid.layers.cross_entropy(predict, label)
            avg_loss = fluid.layers.mean(loss)
            
            #每训练了200批次的数据,打印下当前Loss的情况
            if batch_id % 200 == 0:
                print("epoch: {}, batch: {}, loss is: {}, acc is {}".format(epoch_id, batch_id, avg_loss.numpy(),avg_acc.numpy()))
            
            #后向传播,更新参数的过程
            avg_loss.backward()
            optimizer.minimize(avg_loss)
            model.clear_gradients()  # 清除梯度

4.在每个batch计算梯度之后,都会将梯度清零,就像“下山”那样,计算出最快下山的角度并走了一步之后,需要重新计算此时往哪个方向走,下山速度是最快的

猜你喜欢

转载自blog.csdn.net/qq_43523725/article/details/108300535