Keras学习
一、Keras概述
1、介紹
- Keras?是一個兼容?Theano?和?Tensorflow?的神經網絡高級包
- 用他來組件一個神經網絡更加快速, 幾條語句就搞定
- Keras?可以再在?Windows?和?MacOS?或者?Linux?上運行
- 網站:https://keras.io/
2、安裝Keras
- 需要事先安裝好numpy和scipy
- 直接pip安裝:pip install keras
- Keras有兩個backend,就是是基于什么進行運算的,一個是Tensorflow,一個是Theano
-
通過修改配置文件永久修改
- 默認配置是Tensorflow,這里改為Theano
- Windows在用戶的文件夾下有個配置文件:C:\Users\bob\.keras文件夾下的keras.json文件
- 修改即可
123456 {"image_dim_ordering": "tf", "epsilon": 1e-07, "floatx": "float32", "backend": "theano"}
-
修改當前腳本的環境變量
123 import os os.environ['KERAS_BACKEND']='tensorflow' # 或者theanoimport keras
二、搭建神經網絡
1、一個神經網絡例子
-
導入包
12345 import kerasimport numpy as npfrom keras.models import Sequential # Sequential順序建立from keras.layers import Dense # 全連接層import matplotlib.pyplot as plt -
制造數據
12345678 '''制造數據,并且顯示'''X = np.linspace(-1,1,200)np.random.shuffle(X)Y = 0.5 * X + 2 + np.random.normal(0,0.05,(200,))plt.scatter(X,Y)plt.show()X_train,Y_train = X[:160],Y[:160]X_test,Y_test = X[160:],Y[160:] -
建立模型
123 '''建立模型'''model = Sequential() # 通過Sequential建立modelmodel.add(Dense(output_dim=1, input_dim=1)) # model.add添加神經層,指定輸入和輸出維度 -
激活模型
12 '''激活模型'''model.compile(optimizer='sgd', loss='mse') -
訓練模型
1234 for i in range(500):cost = model.train_on_batch(X_train,Y_train) # 使用批訓練if i % 50 == 0:print(cost) -
測試集的cost誤差
12 cost = model.evaluate(X_test, Y_test, batch_size=40)print(cost) -
學到的權重和偏置
123 '''輸出學到的權重和偏置'''W,b = model.layers[0].get_weights()print(W,b) -
預測
1 Y_pred = model.predict(X_test)
2、手寫數字識別例子–mnist
-
導入包:
1234567 import kerasfrom keras.datasets import mnistfrom keras.utils import np_utilsimport numpy as npfrom keras.models import Sequential # Sequential順序建立from keras.layers import Dense,Activation # 全連接層from keras.optimizers import RMSprop -
加載并預處理數據
123456 '''加載和預處理數據'''(X_train,y_train),(X_test,y_test) = mnist.load_data() # 下載數據集,windows在當前用戶的對應目錄下:C:\Users\bob\.keras\datasetsX_train = X_train.reshape(X_train.shape[0],-1)/255 # X_train是(60000, 28, 28),reshape一下變成(60000,784),然后在標準化X_test = X_test.reshape(X_test.shape[0],-1)/255y_train = np_utils.to_categorical(y_train,nb_classes=10) # y_train對應的數字1,2,3....轉換為0/1映射y_test = np_utils.to_categorical(y_test,nb_classes=10) -
建立模型
1234567 '''建立模型'''model = Sequential(layers=[Dense(output_dim=32,input_dim=784), # 第一層,輸入為784維,輸出為32維Activation('relu'), # 激勵函數為reluDense(10), # 第二層,這里不需要指定輸入層維度,全連接會使用上一層的輸出,這里即32Activation('softmax'), # 激勵函數,也是最后的預測函數使用softmax]) -
激活模型
123456 '''定義optimizer'''rmsprop = RMSprop()'''激活模型'''model.compile(optimizer=rmsprop, loss='categorical_crossentropy', # 分類中使用交叉熵損失函數metrics=['accuracy']) # 計算準確度 -
訓練模型
1 model.fit(X_train,y_train,nb_epoch=2,batch_size=100) # nb_epoch整個訓練集訓練次數 -
測試集上預測信息
1234 '''測試集測試訓練出的模型'''loss,accuracy = model.evaluate(X_test,y_test)print('loss:',loss)print('accuracy',accuracy)
3、卷積神經網絡CNN–mnist
-
導入包
1234567 import kerasfrom keras.datasets import mnistfrom keras.utils import np_utilsimport numpy as npfrom keras.models import Sequential # Sequential順序建立from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flattenfrom keras.optimizers import RMSprop,Adam -
建立模型
123456789101112131415161718192021222324252627282930313233 model = Sequential()## 第一層卷積model.add(Convolution2D(nb_filter=32, # 32個filter,即從32個特征提取nb_row=5, # patch大小nb_col=5, border_mode='same', dim_ordering='th', # theano使用th,TensorFlow使用tfinput_shape=(1,28,28,) # 輸入的大小,1表示輸入的channel通道,由于是黑白圖所以是1,若是rgb是3個通道))## 第一層激活層model.add(Activation('relu'))## 第一層池化層model.add(MaxPooling2D(pool_size=(2,2), # 2x2的大小strides=(2,2), # 步長為2,縱向和橫向border_mode='same'))### 第二層卷積層model.add(Convolution2D(nb_filter=64, # 不需要指定輸入的大小了nb_row=5,nb_col=5, border_mode='same'))### 第二層激活層model.add(Activation('relu'))### 第二層池化層model.add(MaxPooling2D(border_mode='same'))#### 全連接層model.add(Flatten()) # 展開model.add(Dense(output_dim=1024)) # 輸出維度為1024model.add(Activation('relu'))model.add(Dense(output_dim=10)) # 最終輸出為10類model.add(Activation('softmax')) -
激活模型
1234 adam = Adam()model.compile(optimizer=adam, # 使用adam的optimizerloss='categorical_crossentropy',metrics=['accuracy']) -
訓練模型
1 model.fit(X_train, y_train) -
測試集計算結果
1234 '''測試集模型'''loss,accuracy = model.evaluate(X_test,y_test)print("loss",loss)print('accuracy',accuracy)
原文地址:?http://lawlite.me/2017/02/14/Keras%E5%AD%A6%E4%B9%A0/
總結
- 上一篇: Tensorflow学习
- 下一篇: GAN for NLP (论文笔记及解读