初見深度學(xué)習(xí)

在一次偶然的機(jī)會下,接觸到了指導(dǎo)老師所經(jīng)手的項目,開始了我的深度學(xué)習(xí)之旅。在此進(jìn)行一些學(xué)習(xí)上的記錄與心得:

1.安裝tensorflow庫

????對于深度學(xué)習(xí)而言,其必備庫自然為tensorflow,關(guān)于這個庫的安裝確實存在一些坑,該庫已經(jīng)更新到2.2.0版本及其以上。但如果你在網(wǎng)上直接檢索,你會發(fā)現(xiàn)其大多數(shù)的安裝貼均為1.8 1.9版本,而實際上隨著更新,官方已經(jīng)移除了這兩個版本,并且語法也有較大的改變。所以按照其上進(jìn)行安裝的時候,我的python也進(jìn)行了瘋狂報錯:主要分為下列兩個大問題:

? ? 1.DLL error 找不到相應(yīng)模塊

? ? 2.HDF5文件不匹配

? ? 關(guān)于第一個問題,我個人采取的解決方案是搭建虛擬python環(huán)境為3.6。 經(jīng)過查找相關(guān)資料發(fā)現(xiàn)python 3.5-3.8均可,然后在虛擬環(huán)境下進(jìn)行tensorflow安裝,隨后發(fā)現(xiàn)可能是太久沒用python,相關(guān)庫未進(jìn)行更新。隨即upgrade一下就能成功import tensorflow as tf

? ? 第二個問題就是在實際運行中,總會報錯HDF5不匹配? 仔細(xì)查看報錯原因是HDF5已經(jīng)到1.10.5而tensorflow 所使用的HDF5基于1.10.4。所以就會報不匹配的錯。解決方案也很簡單,卸載高版本重新安裝低版本即可。

2.使用tensorflow進(jìn)行搭建一個簡單的LSTM網(wǎng)絡(luò)

? ? 由于剛?cè)腴T接觸這個tensorflow庫,對其函數(shù)還不甚了解,在網(wǎng)上查找半天發(fā)現(xiàn)長代碼稍許難以理解。故選取了一個最簡單的LSTM進(jìn)行入手,其功能主要為鑒別整數(shù)與小數(shù),代碼如下:

from tensorflow.python.keras.layers.core import Dense, Dropout,Activation,Flatten

from tensorflow.python.keras.models import Sequential

from tensorflow.python.keras.utils import np_utils

from tensorflow.python.keras.layers import LSTM

import tensorflow as tf

import numpy as np

def train():

? ? nyarray= [ [[9]],[[2.5]],[[3]],[[4.6]],[[6.9]],[[10]] ]

? ? nycheck= [ [[1]],[[0]],[[1]],[[0]],[[0]],[[1]] ]

? ? pd=tf.cast(nyarray,tf.float32)

? ? pe=tf.cast(nycheck,tf.float32)

? ? model = Sequential()

? ? lstm = LSTM(10,input_shape=(1,1))

? ? dense = Dense((1),input_shape = (1,1))

? ? activate= Activation('relu')

? ? model.add(lstm)

? ? model.add(dense)

? ? model.add(activate)

? ? model.compile(loss='mse',optimizer='adam',metrics=['accuracy'])

? ? model.fit(pd,pe,epochs=500,shuffle=True)

train()

我們先從引用的庫進(jìn)行分析? dense為全連接層?

dropout是tensorflow中防止訓(xùn)練過擬合的一種措施,實際作用無非是使輸入tensor中某些元素變?yōu)?,其它沒變0的元素變?yōu)樵瓉淼?/keep_prob大小。但是我這里數(shù)據(jù)量非常小,故實際上沒有進(jìn)行調(diào)用。

Activation 字面意思 激活函數(shù)

Sequential 序列模型 就是個將各個層加在一起,然后開始訓(xùn)練。

隨即開始代碼分析,我們首先給出兩個數(shù)據(jù)組 一個是輸入數(shù)據(jù)一個是識別數(shù)據(jù),隨后我們將數(shù)據(jù)進(jìn)行轉(zhuǎn)化為32位浮點數(shù)據(jù)。設(shè)定了10個單元,輸入數(shù)據(jù)為1維。添加一個全連接層,隨后用relu函數(shù)進(jìn)行激活。最后將之前構(gòu)建的層相連接,開始訓(xùn)練

訓(xùn)練時損失函數(shù)采用均方誤差(標(biāo)準(zhǔn)差)優(yōu)化器則采用adam(沒咋看過這個)然后就開始訓(xùn)練了?

訓(xùn)練次數(shù)為500次,輸出結(jié)果如下


6/6 [==============================] - 0s 651us/sample - loss: 0.1900 - accuracy: 0.6667

Epoch 148/500

6/6 [==============================] - 0s 488us/sample - loss: 0.1899 - accuracy: 0.6667

Epoch 149/500

6/6 [==============================] - 0s 813us/sample - loss: 0.1898 - accuracy: 0.6667

6/6 [==============================] - 0s 814us/sample - loss: 0.1511 - accuracy: 0.8333

Epoch 499/500

6/6 [==============================] - 0s 651us/sample - loss: 0.1510 - accuracy: 0.8333

Epoch 500/500

6/6 [==============================] - 0s 813us/sample - loss: 0.1508 - accuracy: 0.8333

發(fā)現(xiàn)損失值的確在緩慢下降 并且準(zhǔn)確度也再提高,符合預(yù)期。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容