Keras 是一个基于 Python 的高层神经网络库,其可以使用 Tensorflow、Theano 以及 CNTK 等著名深度学习框架作为后端。Keras 的设计理念为简单而便捷,你可以通过几行代码构建一个复杂的卷积神经网络或循环神经网络。
笼统的说,符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译以确定其内部细节,然而,此时的计算图还是一个“空壳子”,里面没有任何实际的数据,只有当你把需要运算的输入放进去后,才能在整个模型中形成数据流,从而形成输出值。
个人理解,计算图就可以看做一个更加复杂的公式,代入数据获得输出。
通俗的讲就是多维数组,我们用张量来表示广泛的数据类型,来代入计算图中参与计算。
张量的阶数有时候也称为维度,或者轴,轴这个词翻译自英文axis。譬如一个矩阵[[1,2],[3,4]],是一个2阶张量,有两个维度或轴,沿着第0个轴(为了与python的计数方式一致,本文档维度和轴从0算起)你看到的是[1,2],[3,4]两个向量,沿着第1个轴你看到的是[1,3],[2,4]两个向量
python、tensorflow、numpy等常用环境安装就不再概述了,必须tensorflow环境安装好了再运行下面命令
# CPU 版本 Tensorflow
sudo pip install --upgrade tensorflow
# Keras 安装
sudo pip install keras
Keras 已经默认采用 Tensorflow 作为后端,一般情况下,也无必要再采用 Theano 作为后端了。
一个同样的神经网络,Tensorflow、Theano需要敲一堆代码,而Keras只需要简单的几行代码。
下面代码演示建立一个网络,它与介绍Tensorflow、Theano时候演示用的是同样的网络,明显简单了很多:
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
#随机生成一份数据
x_data = np.linspace(-1,1,30)[:,np.newaxis]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data) - 0.5 + noise
#定义函数模型,序惯
model = Sequential()
#添加一个10个神经元的隐藏层,激励函数relu
model.add(Dense(10,activation='relu', input_dim=1))
#添加一个输出层
model.add(Dense(1))
#随机梯度下降,学习率0.1
sgd = SGD(lr=0.1)
#编译,损失函数是平方差
model.compile(loss='mse', optimizer=sgd, metrics=['accuracy'])
#开始训练,训练100次,每次取10个数据
model.fit(x_data, y_data, epochs=100, batch_size=10)
#测试与展示结果
plt.scatter(x_data, y_data)
testx = np.linspace(-1,1,100)[:,np.newaxis]
testy=model.predict_on_batch(testx)
testy = testy.reshape((100,))
testx = testx.reshape((100,))
#print(testx)
print(testy)
plt.plot(testx,testy, c='r')
plt.show()
用可是化工具,展示2.1中的模型结构
#需要安装如下环境
sudo apt-get install graphviz
sudo pip install pydot-ng
sudo pip install graphviz
然后再添加如下代码输出图片
from keras.utils import plot_model
plot_model(model,to_file='model.png')