パドルパドルモデルのトレーニングと予測のための高度な API

ガイド

高级APIPaddlepaddle では、モデル トレーニングにとという 2 つの異なる方法が提供されています基础API。2 つのモデルのトレーニング方法には、それぞれ長所と短所があります。さまざまな使用シナリオに応じて、異なる方法を選択できます。

  • 高度な API: シンプルなコード、高速なモデル構築、低い柔軟性、変更が不便
  • 基本 API: 比較的複雑で柔軟性が高く、ニーズに応じて自由に変更できます。

モデルトレーニング

高レベル API を使用したモデルのトレーニングは 5 つのステップに分けることができます

  • データのロードと前処理

ここでは を使用しています FashionMNISTFashionMNISTこれは に組み込まれているpaddlepaddleため、データセットをロードするために直接使用できますpaddle.vision.datasets.FashionMNIST。独自のデータセットを使用している場合は、paddle.io.Datasetそれをカプセル化できます。ここではtransforms入力画像の前処理に使用しています。

  • モデル構築

モデルの構築に使用するのは、構築されたモデルをカプセル化するSequentialことによって LeNet ネットワークを構築することです。paddle.Model

  • モデルパラメータの設定

モデル トレーニングのパラメーターと、損失関数と勾配降下法の最適化アルゴリズムを設定し、次のようにmodel.prepareモデル パラメーターを設定します。

  • モデルトレーニング

model.fitモデルをトレーニングするには

  • モデルの評価

model.evaluateテストセットでモデルのパフォーマンスを評価するには、

import paddle
from paddle import nn
from paddle.vision import transforms

#设置模型使用的硬件设备
paddle.device.set_device("gpu:0")

#数据的预处理,将输入的图片数据的均值归一化为0,方差为1
transform = transforms.Normalize(mean=[127.5],std=[127.5],data_format="CHW")

#加载训练集和测试集
train_data = paddle.vision.datasets.FashionMNIST(mode="train",transform=transform)
test_data = paddle.vision.datasets.FashionMNIST(mode="test",transform=transform)
#设置数据集类别的数量
num_classes = 10
#设置模型训练的epoch
epoch = 10
#设置batch_size
batch_size = 64

#模型的构建
lenet = nn.Sequential(
    nn.Conv2D(1,6,3,stride=1,padding=1),#输入:1x28x28,输出:6x28x28
    nn.ReLU(),
    nn.MaxPool2D(2,2),#输出:6x14x14
    nn.Conv2D(6,16,5,stride=1,padding=0),#输出:16x10x10
    nn.ReLU(),
    nn.MaxPool2D(2,2),#输出:16x5x5
    nn.Flatten(),
    nn.Linear(400,120),
    nn.Linear(120,84),
    nn.Linear(84,num_classes)
)

#模型封装
model = paddle.Model(lenet)

#设置模型训练时使用的优化器/损失函数/评价指标
optim = paddle.optimizer.Adam(learning_rate=0.001,parameters=model.parameters())
loss_fn = paddle.nn.CrossEntropyLoss()
acc = paddle.metric.Accuracy()

#模型的配置
model.prepare(optimizer=optim,loss=loss_fn,metrics=acc)

#模型训练
model.fit(train_data,epochs=epoch,batch_size=batch_size,verbose=1,save_dir="output")

#模型评估
eval_res = model.evaluate(test_data,verbose=1)
print(eval_res)

モデルトレーニングの出力結果

Epoch 1/10
step 938/938 [==============================] - loss: 0.4084 - acc: 0.8158 - 20ms/step             
Epoch 2/10
step 938/938 [==============================] - loss: 0.3929 - acc: 0.8706 - 14ms/step           
Epoch 3/10
step 938/938 [==============================] - loss: 0.3072 - acc: 0.8807 - 14ms/step           
Epoch 4/10
step 938/938 [==============================] - loss: 0.4311 - acc: 0.8878 - 14ms/step           
Epoch 5/10
step 938/938 [==============================] - loss: 0.1816 - acc: 0.8927 - 14ms/step           
Epoch 6/10
step 938/938 [==============================] - loss: 0.0690 - acc: 0.8972 - 16ms/step           
Epoch 7/10
step 938/938 [==============================] - loss: 0.4872 - acc: 0.8994 - 16ms/step           
Epoch 8/10
step 938/938 [==============================] - loss: 0.2345 - acc: 0.9022 - 15ms/step           
Epoch 9/10
step 938/938 [==============================] - loss: 0.2607 - acc: 0.9051 - 16ms/step           
Epoch 10/10
step 938/938 [==============================] - loss: 0.3903 - acc: 0.9088 - 15ms/step           
Eval begin...
step 10000/10000 [==============================] - loss: 0.4506 - acc: 0.8796 - 4ms/step                
Eval samples: 10000
{'loss': [0.45056665], 'acc': 0.8796}

モデルの読み込みと予測

from matplotlib import pyplot as plt

#加载模型
model.load("output/9")
#加载模型配置
model.prepare()
#模型预测
test_result = model.predict(test_data)
output = test_result[0]
#显示预测的结果
plt.figure(figsize=(8,8))
#设置行和列的数量
row_num = 4
col_num = 4
for i in range(16):
    img,true_label = test_data[i]
    pred_label = output[i].argmax()
    plt.subplot(row_num,col_num,i+1)
    img = img[0]
    plt.imshow(img)
    plt.title("ture:{}\n predict:{}".format(true_label[0],pred_label))
    #隐藏x轴和y轴
    plt.xticks([])
    plt.yticks([])

plt.show()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/sinat_29957455/article/details/126942399