keras建模的3種方式詳解
keras建模的3種方式
keras是google公司2016年發(fā)布的tensorflow為后端的深度學(xué)習(xí)網(wǎng)絡(luò)的高級(jí)接口。
三種建模方式:
- 序列模型
- 函數(shù)模型
- 子類模型
第一種序列模型:
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Sequential
from keras.models import load_model
from keras.layers import Dense
#加載數(shù)據(jù)
def read_data(path):
mnist=input_data.read_data_sets(path,one_hot=True)
train_x,train_y=mnist.train.images,mnist.train.labels,
valid_x,valid_y=mnist.validation.images,mnist.validation.labels,
test_x,test_y=mnist.test.images,mnist.test.labels
return train_x,train_y,valid_x,valid_y,test_x,test_y
#序列模型
def DNN(train_x,train_y,valid_x,valid_y):
#創(chuàng)建模型
model=Sequential()
model.add(Dense(64,input_dim=784,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(10,activation='softmax'))
#查看網(wǎng)絡(luò)模型
model.summary()
#編譯模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
#訓(xùn)練模型
model.fit(train_x,train_y,batch_size=500,nb_epoch=100,verbose=1,validation_data=(valid_x,valid_y))
#保存模型
model.save('sequential.h5')
train_x,train_y,valid_x,valid_y,test_x,test_y=read_data('MNIST_data')
DNN(train_x,train_y,valid_x,valid_y)
model=load_model('sequential.h5') #下載模型
pre=model.predict(test_x) #測(cè)試驗(yàn)證
#計(jì)算驗(yàn)證集精度
a=np.argmax(pre,1)
b=np.argmax(test_y,1)
t=(a==b).astype(int)
acc=np.sum(t)/len(a)
print(acc)第二種函數(shù)模型
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Model
from keras.models import load_model
from keras.layers import Input,Dense
#加載數(shù)據(jù)
def read_data(path):
mnist=input_data.read_data_sets(path,one_hot=True)
train_x,train_y=mnist.train.images,mnist.train.labels,
valid_x,valid_y=mnist.validation.images,mnist.validation.labels,
test_x,test_y=mnist.test.images,mnist.test.labels
return train_x,train_y,valid_x,valid_y,test_x,test_y
#函數(shù)模型
def DNN(train_x,train_y,valid_x,valid_y):
#創(chuàng)建模型
inputs=Input(shape=(784,))
x=Dense(64,activation='relu')(inputs)
x=Dense(128,activation='relu')(x)
output=Dense(10,activation='softmax')(x)
model=Model(input=inputs,output=output)
#查看網(wǎng)絡(luò)結(jié)構(gòu)
model.summary()
#編譯模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
#訓(xùn)練模型
model.fit(train_x,train_y,batch_size=500,nb_epoch=100,verbose=1,validation_data=(valid_x,valid_y))
#保存模型
model.save('fun_model.h5')
train_x,train_y,valid_x,valid_y,test_x,test_y=read_data('MNIST_data')
DNN(train_x,train_y,valid_x,valid_y)
model=load_model('fun_model.h5') #下載模型
pre=model.predict(test_x) #驗(yàn)證數(shù)據(jù)集
#驗(yàn)證數(shù)據(jù)集準(zhǔn)確度
a=np.argmax(pre,1)
b=np.argmax(test_y,1)
t=(a==b).astype(int)
acc=np.sum(t)/len(a)
print(acc)第三種子類模型
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Model
from keras.layers import Dense
#加載數(shù)據(jù)
def read_data(path):
mnist=input_data.read_data_sets(path,one_hot=True)
train_x,train_y=mnist.train.images,mnist.train.labels,
valid_x,valid_y=mnist.validation.images,mnist.validation.labels,
test_x,test_y=mnist.test.images,mnist.test.labels
return train_x,train_y,valid_x,valid_y,test_x,test_y
#子類模型
class DNN(Model):
def __init__(self,train_x,train_y,valid_x,valid_y):
super(DNN,self).__init__()
#初始化網(wǎng)絡(luò)模型
self.dense1=Dense(64,input_dim=784,activation='relu')
self.dense2=Dense(128,activation='relu')
self.dense3=Dense(10,activation='softmax')
def call(self,inputs): #回調(diào)順序
x=self.dense1(inputs)
x=self.dense2(x)
x=self.dense3(x)
return x
train_x,train_y,valid_x,valid_y,test_x,test_y=read_data('MNIST_data')
model=DNN(train_x,train_y,valid_x,valid_y)
#編譯模型(學(xué)習(xí)率、損失函數(shù)、模型評(píng)估)
model.compile(optimizer='adam(lr=0.001)',loss='categorical_crossentropy',metrics=['accuracy'])
#訓(xùn)練模型
model.fit(train_x,train_y,batch_size=500,nb_epoch=100,verbose=1,validation_data=(valid_x,valid_y))
#查看網(wǎng)絡(luò)結(jié)構(gòu)
model.summary()
pre=model.predict(test_x) #驗(yàn)證數(shù)據(jù)集
#計(jì)算驗(yàn)證數(shù)據(jù)集的準(zhǔn)確度
a=np.argmax(pre,1)
b=np.argmax(test_y,1)
t=(a==b).astype(int)
acc=np.sum(t)/len(a)
print(acc)常用的損失函數(shù):
mse #均方差(回歸)
mae #絕對(duì)誤差(回歸)
binary_crossentropy #二值交叉熵(二分類,邏輯回歸)
categorical_crossentropy #交叉熵(多分類)
到此這篇關(guān)于keras建模的3種方式詳解的文章就介紹到這了,更多相關(guān)keras建模方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jupyter notebook保存文件默認(rèn)路徑更改方法匯總(親測(cè)可以)
安裝Anaconda后,新建文件的默認(rèn)存儲(chǔ)路徑一般在C系統(tǒng)盤,那么路徑是什么呢?如何更改jupyter notebook保存文件默認(rèn)路徑呢?今天小編就這一問(wèn)題通過(guò)兩種方法給大家講解,需要的朋友跟隨小編一起看看吧2021-06-06
Python中比較特別的除法運(yùn)算和冪運(yùn)算介紹
這篇文章主要介紹了Python中比較特別的除法運(yùn)算和冪運(yùn)算介紹,“/”這個(gè)是除法運(yùn)算,那么這個(gè)“//”呢?“*”這個(gè)是乘法運(yùn)算,那么這個(gè)“**”呢?本文就講解這些運(yùn)算的不同,需要的朋友可以參考下2015-04-04
Python中的lambda和apply用法及說(shuō)明
這篇文章主要介紹了Python中的lambda和apply用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
python中把元組轉(zhuǎn)換為namedtuple方法
在本篇文章里小編給大家整理的是一篇關(guān)于python中把元組轉(zhuǎn)換為namedtuple方法,有興趣的朋友們可以參考下。2020-12-12
python實(shí)現(xiàn)beta分布概率密度函數(shù)的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)beta分布概率密度函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python教程之生產(chǎn)者消費(fèi)者模式解析
在并發(fā)編程中使用生產(chǎn)者和消費(fèi)者模式能夠解決大不多的并發(fā)問(wèn)題。該模式通過(guò)平衡生產(chǎn)線程和消費(fèi)線程的工作能力來(lái)提高程序的整體處理數(shù)據(jù)的速度2021-09-09
ansible作為python模塊庫(kù)使用的方法實(shí)例
ansible是一個(gè)python package,是個(gè)完全的unpack and play軟件,對(duì)客戶端唯一的要求是有ssh有python,并且裝了python-simplejson包,部署上簡(jiǎn)單到發(fā)指。下面這篇文章就給大家主要介紹了ansible作為python模塊庫(kù)使用的方法實(shí)例,需要的朋友可以參考借鑒。2017-01-01

