""" 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)