日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(十)keras学习笔记

發(fā)布時(shí)間:2025/3/21 pytorch 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(十)keras学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

keras學(xué)習(xí)筆記

原文地址:http://blog.csdn.net/hjimce/article/details/49095199

作者:hjimce

keras與torch7的使用非常相似,是最近才火起來的深度學(xué)習(xí)開源庫,底層是用了theano。keras可以說是python版的torch7,對于快速構(gòu)建CNN模型非常方便。同時(shí)也包含了一些最新文獻(xiàn)的算法,比如Batch Noramlize,文檔教程也很全,在官網(wǎng)上作者都是直接給例子淺顯易懂,個(gè)人感覺非常容易上手。keras也支持保存訓(xùn)練好的參數(shù),然后加載已經(jīng)訓(xùn)練好的參數(shù),進(jìn)行繼續(xù)訓(xùn)練。

一、安裝教程。

因?yàn)閗eras是在theano的基礎(chǔ)上進(jìn)行封裝的,所以我們需要先安裝好theano后,再繼續(xù)安裝keras。theano的安裝可以參考我的另外一篇博文,因?yàn)槲以诹硗庖黄┪闹?#xff0c;是在windows環(huán)境下搭建theano的,所以這里所講的keras的安裝也是在windows下。

其實(shí)如果在ubuntu中,theano沒有安裝也沒關(guān)系,只要使用命令:pip install keras。如果順利的話,系統(tǒng)會(huì)幫你把keras所有所需的庫都給安裝了,包括theano。

windows安裝步驟:

1、參考我的另外一篇博文,安裝theano,并測試沒有問題。

2、使用Anaconda,然后在命令anaconda的命令窗口中輸入:pip install keras

這個(gè)時(shí)候有可能出現(xiàn)h5py安裝失敗:


那么請到網(wǎng)站:http://www.lfd.uci.edu/~gohlke/pythonlibs/? 下載h5py。

打開上面的網(wǎng)站,找到h5py:


根據(jù)根據(jù)自己的電腦選擇相應(yīng)的版本,我的電腦是64為系統(tǒng),python為2.7,所以選擇了:h5py-2.5.0-cp27-none-win_amd64.whl。 然后把下載到的h5py文件,放到Anaconda所在的安裝目錄下:
最后我們在anaconda的命令窗口中輸入命令:pip install??h5py-2.5.0-cp27-none-win_amd64.whl 。等h5py安裝完后。在重新安裝keras輸入命令:pip install keras。


上面如果還是安裝失敗,那么試試升級(jí)pip版本,輸入:python-m pip install --upgrade pip,把pip的版本升級(jí)一下。 二、keras 使用教程 下面貼個(gè)簡單的例子、更多的例子可以自己到官網(wǎng)的文檔教程上看,官網(wǎng)給了很詳細(xì)的教程,不像caffe的文檔那么少。看一下下面例子,松松構(gòu)建CNN模型。keras為我們提供了兩種網(wǎng)絡(luò)模型. 1、一種是CNN比較常用到的sequential網(wǎng)絡(luò)結(jié)構(gòu),調(diào)用方法如下:

[python]?view plaincopy
  • #?coding=utf-8??
  • ??
  • import?numpy?as?np??
  • ??
  • #np.random.seed(100)??
  • ??
  • from?keras.optimizers?import?SGD??
  • ??
  • import?os??
  • import??matplotlib.pyplot?as?plt??
  • ??
  • import?h5py??
  • from?keras.models?import?Sequential??
  • from?keras.layers.convolutional?import?Convolution2D,?MaxPooling2D,?ZeroPadding2D??
  • from?keras.layers.core?import?Dense,Dropout,Activation,Flatten??
  • from?keras.layers.normalization?import??BatchNormalization??
  • from?keras.optimizers?import?SGD,?Adadelta,?Adagrad,RMSprop??
  • from?keras.layers.advanced_activations?import?PReLU??
  • ??
  • from??keras.callbacks?import?ModelCheckpoint,Callback??
  • ??
  • ??
  • class?LossHistory(Callback):??
  • ????def?on_train_begin(self,?logs={}):??
  • ????????self.losses?=?[]??
  • ??
  • ????def?on_batch_end(self,?batch,?logs={}):??
  • ????????self.losses.append(logs.get('loss'))??
  • ??
  • def?Net_Mouth():??
  • ????keras_model=Sequential()#單支線性網(wǎng)絡(luò)模型??
  • ????#卷積層輸出的特征圖為20個(gè),卷積核大小為5*5??
  • ????keras_model.add(Convolution2D(20,?5,?5,input_shape=(3,?60,?60)))#網(wǎng)絡(luò)輸入每張圖片大小為3通道,60*60的圖片。??
  • ????#激活函數(shù)層??
  • ????keras_model.add(Activation('relu'))??
  • ????#最大池化層??
  • ????keras_model.add(MaxPooling2D(pool_size=(2,?2)))??
  • ??
  • ????#卷積層,特征圖個(gè)數(shù)為40,卷積核大小為5*5??
  • ????keras_model.add(Convolution2D(40,?5,?5))??
  • ????keras_model.add(Activation('relu'))??
  • ??
  • ????keras_model.add(MaxPooling2D(pool_size=(2,?2)))??
  • ??
  • ??
  • ????keras_model.add(Convolution2D(60,?3,?3))??
  • ????keras_model.add(Activation('relu'))??
  • ??
  • ????keras_model.add(MaxPooling2D(pool_size=(2,?2)))??
  • ??
  • ??
  • ????keras_model.add(Convolution2D(80,?3,?3))??
  • ????keras_model.add(Activation('relu'))??
  • ??
  • ????#全連接展平??
  • ????keras_model.add(Flatten())??
  • ????#全連接層,神經(jīng)元個(gè)數(shù)為1000??
  • ????keras_model.add(Dense(1000))??
  • ????keras_model.add(Activation('relu'))??
  • ??
  • ????keras_model.add(Dense(500))??
  • ????keras_model.add(Activation('relu'))??
  • ??
  • ??
  • ????keras_model.add(Dense(38))??
  • ????keras_model.add(Activation('tanh'))??
  • ??
  • ????#采用adam算法進(jìn)行迭代優(yōu)化,損失函數(shù)采用均方誤差計(jì)算公式??
  • ????keras_model.compile(loss='mean_squared_error',?optimizer='adam')??
  • ????return?keras_model??
  • ??
  • keras_model=Net_Mouth()??
  • #用于保存驗(yàn)證集誤差最小的參數(shù),當(dāng)驗(yàn)證集誤差減少時(shí),立馬保存下來??
  • checkpointer?=ModelCheckpoint(filepath="mouth.hdf5",?verbose=1,?save_best_only=True)??
  • history?=?LossHistory()??
  • #訓(xùn)練函數(shù),對于cnn來說,網(wǎng)絡(luò)的輸入x是(nsamples,nchanels,height,width)??
  • #y的輸入是(nsamples,output_dimension)??
  • keras_model.fit(x,?y,?batch_size=128,?nb_epoch=100,shuffle=True,verbose=2,show_accuracy=True,validation_split=0.1,callbacks=[checkpointer,history])??
  • 2、圖模型,根據(jù)節(jié)點(diǎn)進(jìn)行命名連接的一種網(wǎng)絡(luò)結(jié)構(gòu)

    [python]?view plaincopy
  • #?coding=utf-8??
  • import??numpy?as?np??
  • from??keras.models?import?Graph??
  • import?numpy?as?np??
  • ??
  • np.random.seed(100)??
  • import?os??
  • import??matplotlib.pyplot?as?plt??
  • ??
  • import?h5py??
  • from?keras.models?import?Graph??
  • from?keras.layers.convolutional?import?Convolution2D,?MaxPooling2D??
  • from?keras.layers.core?import?Dense,Activation,Flatten,?Dropout??
  • import??keras.optimizers??
  • ??
  • from??keras.callbacks?import?ModelCheckpoint,Callback??
  • ??
  • class?LossHistory(Callback):??
  • ????def?on_train_begin(self,?logs={}):??
  • ????????self.losses?=?[]??
  • ??
  • ????def?on_batch_end(self,?batch,?logs={}):??
  • ????????self.losses.append(logs.get('loss'))??
  • ??
  • #graph?模型,下面的例子是CNN的局部unshared?weight?例子??
  • #用于人臉五官特征點(diǎn)的定位預(yù)測,采用五官局部unshared?weight??
  • def?Second_Net_Graph():??
  • ????keras_model=Graph()??
  • ????#網(wǎng)絡(luò)輸入,一張圖片3通道,60*60的圖片。name表示圖模型的節(jié)點(diǎn)名稱,我們把第一層輸入命名為input??
  • ????keras_model.add_input(name='input',input_shape=(3,60,60))??
  • ????#第一個(gè)卷積層節(jié)點(diǎn),我們把它命名為conv1,這一層連接到input節(jié)點(diǎn)上,input節(jié)點(diǎn)作為輸入??
  • ????keras_model.add_node(layer=Convolution2D(20,?5,?5),name='conv1',input='input')??
  • ????#激活函數(shù)節(jié)點(diǎn),我們把它命名為relul,這一節(jié)點(diǎn)連接到conv1節(jié)點(diǎn)上??
  • ????keras_model.add_node(layer=Activation('relu'),name='relul',input='conv1')??
  • ????keras_model.add_node(layer=MaxPooling2D(pool_size=(2,?2)),name='pool1',input='relul')??
  • ??
  • ??
  • ????keras_model.add_node(layer=Convolution2D(40,?5,?5),name='conv2',input='pool1')??
  • ????keras_model.add_node(layer=Activation('relu'),name='relu2',input='conv2')??
  • ????keras_model.add_node(layer=MaxPooling2D(pool_size=(2,?2)),name='pool2',input='relu2')??
  • ??
  • ??
  • ????keras_model.add_node(layer=Convolution2D(60,?3,?3),name='conv3',input='pool2')??
  • ????keras_model.add_node(layer=Activation('relu'),name='relu3',input='conv3')??
  • ????keras_model.add_node(layer=MaxPooling2D(pool_size=(2,?2)),name='pool3',input='relu3')??
  • ??
  • ????#分支,前面是權(quán)重共享,單支情況,接著到這里,我們把它分支成幾個(gè)支路,每個(gè)分支用于預(yù)測各個(gè)五官的特征點(diǎn)位置??
  • ??
  • ????#分支1、這個(gè)節(jié)點(diǎn)名字為brow_input,連接到pool3上,pool3為輸入節(jié)點(diǎn)??
  • ????keras_model.add_node(layer=Convolution2D(80,?3,?3,activation='relu'),name='brow_input',input='pool3')??
  • ????#分支2,節(jié)點(diǎn)名稱為eye_input,輸入節(jié)點(diǎn)為pool3??
  • ????keras_model.add_node(layer=Convolution2D(80,?3,?3,activation='relu'),name='eye_input',input='pool3')??
  • ????#分支3??
  • ????keras_model.add_node(layer=Convolution2D(80,?3,?3,activation='relu'),name='nose_input',input='pool3')??
  • ????#分支4??
  • ????keras_model.add_node(layer=Convolution2D(80,?3,?3,activation='relu'),name='mouth_input',input='pool3')??
  • ??
  • ????#各個(gè)分支展平??
  • ????keras_model.add_node(layer=Flatten(),name='brow_flatten',input='brow_input')??
  • ????keras_model.add_node(layer=Flatten(),name='eye_flatten',input='eye_input')??
  • ????keras_model.add_node(layer=Flatten(),name='nose_flatten',input='nose_input')??
  • ????keras_model.add_node(layer=Flatten(),name='mouth_flatten',input='mouth_input')??
  • ??
  • ??
  • ????#各個(gè)分支全連接??
  • ????keras_model.add_node(layer=Dense(500,activation='relu'),name='brow_dense1',input='brow_flatten')??
  • ????keras_model.add_node(layer=Dense(500,activation='relu'),name='eye_dense1',input='eye_flatten')??
  • ????keras_model.add_node(layer=Dense(500,activation='relu'),name='nose_dense1',input='nose_flatten')??
  • ????keras_model.add_node(layer=Dense(500,activation='relu'),name='mouth_dense1',input='mouth_flatten')??
  • ??
  • ??
  • ??
  • ????#各個(gè)分支的輸出??
  • ????keras_model.add_node(layer=Dense(20,activation='tanh'),name='brow_dense2',input='brow_dense1')??
  • ????keras_model.add_node(layer=Dense(24,activation='tanh'),name='eye_dense2',input='eye_dense1')??
  • ????keras_model.add_node(layer=Dense(18,activation='tanh'),name='nose_dense2',input='nose_dense1')??
  • ????keras_model.add_node(layer=Dense(38,activation='tanh'),name='mouth_dense2',input='mouth_dense1')??
  • ??
  • ????#inputs把各個(gè)分支得到的向量,按節(jié)點(diǎn)的名字,進(jìn)行排放,然后作為輸出??
  • ????keras_model.add_output(name='output',inputs=['brow_dense2','nose_dense2','eye_dense2',??
  • ??????????????????????????????????????????????????????'mouth_dense2'])??
  • ??
  • ????#優(yōu)化方法選擇adam,損失函數(shù)選擇均方差??
  • ????keras_model.compile(optimizer='adam',loss={'output':'mse'})??
  • ????return??keras_model??
  • #讀取模型,并進(jìn)行訓(xùn)練??
  • def?train(data_file='../../h5py/train.h5'):??
  • ????print?'readdata'??
  • ????f=h5py.File(data_file,'r')??
  • ????x=f['data'][:]??
  • ????x=np.asarray(x,dtype='float32')??
  • ????y=f['label'][:]??
  • ????y=np.asarray(y,dtype='float32')??
  • ????print?x.shape??
  • ????print?y.shape??
  • ????print?'train'??
  • ????keras_model=Second_Net_Graph()??
  • ??
  • ????checkpointer?=ModelCheckpoint(filepath="graph51point.hdf5",?verbose=1,?save_best_only=True)??
  • ????history?=?LossHistory()??
  • ????history?=?keras_model.fit({'input':x,?'output':y},?shuffle=True,verbose=2,validation_split=0.1,callbacks=[checkpointer,history])??
  • train()??
  • 個(gè)人心得:感覺keras使用很方便,同時(shí)底層的源碼很很容易讀懂,我們要修改算法,可以去讀一讀底層的源碼,學(xué)習(xí)起來不會(huì)像caffe的底層那么麻煩,個(gè)人感覺caffe的唯一好處就是有很多公開的model、源碼,用起來相當(dāng)麻煩,keras就不一樣了,用python,搞深度學(xué)習(xí),輕松許多,可惜cvpr上的一些文獻(xiàn)的源碼都是用caffe寫的。期待keras像torch一樣,支持caffe模型導(dǎo)入功能。

    **********************作者:hjimce ? 時(shí)間:2015.10.1 ?聯(lián)系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創(chuàng)文章,版權(quán)所有,轉(zhuǎn)載請保留本行信息(不允許刪除)

    總結(jié)

    以上是生活随笔為你收集整理的深度学习(十)keras学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。