Paddle平台中搭建CNN模型,在训练模型中采用tensor类型
生活随笔
收集整理的這篇文章主要介紹了
Paddle平台中搭建CNN模型,在训练模型中采用tensor类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在構建好CNN網絡模型之后,接下來便是通過訓練集來對模型進行訓練:
下面是這次搭建“”美食分類”深度學習代碼中,所用到的訓練部分的代碼:
# CNN網絡組建完畢之后,開始進行模型訓練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數據轉換成tensor張量y_data = np.array([item[1] for item in data], dtype='int64').reshape(-1, 1) # 將元組轉換成numpy.arrayy_data = paddle.to_tensor(y_data, dtype = 'int64', place=paddle.CUDAPinnedPlace())#print("y的數據類型: ", type(y_data))#print("x_data的數據類型:", type(x_data))predicts = model(x_data)#print("預測值的數據類型: ", type(predicts), "\n", "predicts內容: ", 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()通過前面設計的數據讀取器,train_reader來讀取訓練集中的數據,然后可知data[0]是數據,data[1]是訓練圖片所對應的標簽,但是在讀取出來的數據是元組類型,而對于paddle中對paddle.nn.Conv2D以及池化層的描述,輸入的數據應該是tensor,張量,因此在后續將元組轉換成numpy.array之后,采用paddle.to_tensor將numpy.array轉換成張量,對于paddle.to_tensor內部的參量,place=paddle.CUDAPinnedPlace()代表將轉換后的存放于GPU設備,我理解就是采用GPU環境進行訓練。
這樣網絡輸出的預測值presicts的類型也為tensor張量,閱讀paddle關于計算準確率以及損失函數的API文檔,是要求輸入的參數數據類型一致:
loss = fun.cross_entropy(predicts, y_data) acc = paddle.metric.accuracy(predicts, y_data)也就是predicts 以及 y_data的數據類型一致,因此我們需要同樣將訓練集圖片讀取的標簽轉換為tensor類型。
總結
以上是生活随笔為你收集整理的Paddle平台中搭建CNN模型,在训练模型中采用tensor类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 串行通讯 -- IIC通讯原理
- 下一篇: 2016最新申请搜狐自媒体的6点官方建议