一、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"}
修改当前脚本的环境变量
123import osos.environ['KERAS_BACKEND']='tensorflow' # 或者theanoimport keras
二、搭建神经网络
1、一个神经网络例子
导入包
12345import 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')训练模型
1234for i in range(500):cost = model.train_on_batch(X_train,Y_train) # 使用批训练if i % 50 == 0:print(cost)测试集的cost误差
12cost = model.evaluate(X_test, Y_test, batch_size=40)print(cost)学到的权重和偏置
123'''输出学到的权重和偏置'''W,b = model.layers[0].get_weights()print(W,b)预测
1Y_pred = model.predict(X_test)
2、手写数字识别例子–mnist
导入包:
1234567import 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']) # 计算准确度训练模型
1model.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
导入包
1234567import 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建立模型
123456789101112131415161718192021222324252627282930313233model = 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'))激活模型
1234adam = Adam()model.compile(optimizer=adam, # 使用adam的optimizerloss='categorical_crossentropy',metrics=['accuracy'])训练模型
1model.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学习/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议 。转载请注明出处!