Paddle平台中搭建CNN模型,在训练模型中采用tensor类型
在構(gòu)建好CNN網(wǎng)絡(luò)模型之后,接下來便是通過訓(xùn)練集來對(duì)模型進(jìn)行訓(xùn)練:
下面是這次搭建“”美食分類”深度學(xué)習(xí)代碼中,所用到的訓(xùn)練部分的代碼:
# CNN網(wǎng)絡(luò)組建完畢之后,開始進(jìn)行模型訓(xùn)練print(train_parameters['class_dim']) print(train_parameters['label_dict'])model = CNN() optimizer = paddle.optimizer.Adam(learning_rate = train_parameters['learning_strategy']['lr'],parameters = model.parameters())for epoch_num in range (train_parameters['num_epochs']):for batch_id, data in enumerate(train_reader()):x_data = np.array([item[0] for item in data], dtype='float32').reshape(-1, 3, 64, 64)x_data = paddle.to_tensor(x_data, dtype = 'float32', place=paddle.CUDAPinnedPlace()) # 將numpy.array數(shù)據(jù)轉(zhuǎn)換成tensor張量y_data = np.array([item[1] for item in data], dtype='int64').reshape(-1, 1) # 將元組轉(zhuǎn)換成numpy.arrayy_data = paddle.to_tensor(y_data, dtype = 'int64', place=paddle.CUDAPinnedPlace())#print("y的數(shù)據(jù)類型: ", type(y_data))#print("x_data的數(shù)據(jù)類型:", type(x_data))predicts = model(x_data)#print("預(yù)測(cè)值的數(shù)據(jù)類型: ", type(predicts), "\n", "predicts內(nèi)容: ", predicts)loss = fun.cross_entropy(predicts, y_data)acc = paddle.metric.accuracy(predicts, y_data)loss.backward()if batch_id % 1 == 0:print("epoch: {}, batch_id: {}, loss is: {}, acc is: {}".format(epoch_num, batch_id, loss.numpy(), acc.numpy()))optimizer.step()optimizer.clear_grad()通過前面設(shè)計(jì)的數(shù)據(jù)讀取器,train_reader來讀取訓(xùn)練集中的數(shù)據(jù),然后可知data[0]是數(shù)據(jù),data[1]是訓(xùn)練圖片所對(duì)應(yīng)的標(biāo)簽,但是在讀取出來的數(shù)據(jù)是元組類型,而對(duì)于paddle中對(duì)paddle.nn.Conv2D以及池化層的描述,輸入的數(shù)據(jù)應(yīng)該是tensor,張量,因此在后續(xù)將元組轉(zhuǎn)換成numpy.array之后,采用paddle.to_tensor將numpy.array轉(zhuǎn)換成張量,對(duì)于paddle.to_tensor內(nèi)部的參量,place=paddle.CUDAPinnedPlace()代表將轉(zhuǎn)換后的存放于GPU設(shè)備,我理解就是采用GPU環(huán)境進(jìn)行訓(xùn)練。
這樣網(wǎng)絡(luò)輸出的預(yù)測(cè)值presicts的類型也為tensor張量,閱讀paddle關(guān)于計(jì)算準(zhǔn)確率以及損失函數(shù)的API文檔,是要求輸入的參數(shù)數(shù)據(jù)類型一致:
loss = fun.cross_entropy(predicts, y_data) acc = paddle.metric.accuracy(predicts, y_data)也就是predicts 以及 y_data的數(shù)據(jù)類型一致,因此我們需要同樣將訓(xùn)練集圖片讀取的標(biāo)簽轉(zhuǎn)換為tensor類型。
總結(jié)
以上是生活随笔為你收集整理的Paddle平台中搭建CNN模型,在训练模型中采用tensor类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 串行通讯 -- IIC通讯原理
- 下一篇: 2016最新申请搜狐自媒体的6点官方建议