Keras學習筆記1--基本入門


"""
1、30s上手keras
"""
#keras的核心數據結構是“模型”,模型是一種組織網絡層的方式,keras 的主要模型是Sequential模型,Sequential是一系列網絡層按順序構成的棧
from keras.models import Sequential
model=Sequential()
###將一些網絡層通過.add()疊加起來,就構成了一個模型
from keras.layers import Dense,Activation
model.add(Dense(units=64,input_dim=100))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('softmax'))
###完成模型的搭建以后,我們需要使用.compile()方法編譯
model.compile(loss='categorical_crossentropy',optimizer=SGD(lr=0.01,momentum=0.9,nesterov=True))
## 完成編譯以后,在訓練數據上按照batch進行一定次數的迭代來訓練網絡
model.fit(x_train,y_train,epochs=5,batch_size=32)
##  當然,我們也可以手動的把一個個batch送到網絡中去訓練
model.train_on_batch(x_batch,y_batch)
####可以使用一行代碼來對模型進行評估,看看模型的指標是否滿足我們的要求
loss_and_metrics=model.evaluate(x_test,y_test,batch_size=128)
###或者可以使用模型對新的數據進行預測
classes=model.predict(x_test,batch_size=128)
#搭建一個問答系統、圖像分類模型,或神經圖靈機、word2vec詞嵌入器就是這么快。支撐深度學習的基本想法本就是簡單的
####2、快速開始Sequential模型
###Sequential模型是多個網絡層的線性堆疊,也就是“一條路走到黑”
###可以通過向Sequential模型傳遞一個layer的list來構建模型
from keras.models import Sequential
from keras.layers import Dense,Activation
model=Sequential([Dense(32,units=784),Activation('relu'),Dense(10),Activation('softmax')])
###也可以通過add方式,

###指定輸入數據的shape
###模型需要知道輸入數據的shape,因此Sequential的第一層需要接受一個關於輸入數據shape的參數,后面的每一層都可以自動的推導出中間的shape
###因此不需要為每層都指定這個參數
###(1)、傳遞一個 input_shape的關鍵字參數給第一層,input_shape是一個tuple類型的數據,其實也可以填入None,填入None表示此位置是任何正整數
###(2)、有些2D層,如Dense,支持通過指定其輸入維度input_dim來隱含的輸入數據shape,一些3D的時域層支持參數input_dim和input_length來指定shape
###(3)、如果你需要為輸入指定一個固定大小的batch_size(常用於stateful RNN網絡),可以傳遞batch_size參數到一個層中,例如你想輸入張量的batch
###大小是32,數據的shape是(6,8),那么你需要傳遞batch_size=32和input_dim=(6,8)
#編譯  在訓練模型之前,需要通過compile來對學習過程進行配置,接受三個參數
##(1)、優化器optimizier:該參數可以指定為預定義的優化器,如rmsprop、adagrad
##(2)、損失函數loss:該參數為模型是他最小化目標函數,可以為預定義的損失函數名,如categorical——crossentropy、mse
###(3)、指標列表 對於分類問題,我們一般將該列表設置為metrics=[‘accuracy’]。
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

import keras.backend as K
def mean_pred(y_true,y_pred):
    return K.mean(y_pred)
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy',mean_pred])
##訓練   keras以Numpy數組作為輸入數據和標簽的數據類型,訓練模型一般使用fit函數。
###example1-基於多層感知器的softmax分類器
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation
from keras.optimizers import SGD
import numpy as np
import keras
##generate dummy data
x_train=np.random.random((1000,20))
y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)
x_test=np.random.random((100,20))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)

##build model
model=Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64,activation='relu',input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))

sgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)
model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])
model.fit(x_train,y_train,epochs=20,batch_size=128)
score=model.evaluate(x_test,y_test,batch_size=128)
print(score)
###例子2  MLP的二分類
import numpy as np
from keras.models import Sequential
from keras.layers import Dense,Dropout
x_train=np.random.random((1000,20))
y_train=np.random.randint(2,size=(1000,1))
x_test=np.random.random((100,20))
y_test=np.random.randint(2,size=(100,1))

model=Sequential()
model.add(Dense(64,input_dim=20,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
model.fit(x_train,y_train,epochs=20,batch_size=128)
model.evaluate(x_test,y_test,batch_size=128)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM