from keras.models import Sequential
from keras.layers import Dense
import numpy as np
def generateData():
i = 1
X =[]
Y = []
while i < 100:
X.append(i)
Y.append(i*2)
i = i + 1
return np.array( X), np.array(Y)
model = Sequential()
model.add(Dense(1,input_dim = 1))
model.compile(loss='mean_absolute_error', optimizer ='adam')
model.summary()
X,Y=generateData()
model.fit(X[0:70],Y[0:70], epochs=200, batch_size=1)
scores= model.evaluate(x=X[70:],y=Y[70:])
print(scores)
t = np.array([2020,4040])
print(model.predict(t))
麻雀虽小,五脏俱全。代码位于https://github.com/gongrennengzhi/nmt/blob/master/simple.py
在这份极简的代码里,我们可以看到神经网络的完整步骤,一共五步,分别是准备数据,搭建神经网络,训练神经网络,评估神经网络,使用神经网络计算。
1. 准备数据
位于generateData()代码中,数据分为两部分,一部分是源数据,一部分是目标数据,两者之间存在某种关系,需要训练神经网络去学习这种关系。需要注意,keras使用numpy进行数据提交,必须做好数据转换。
2. 搭建网络结构
在keras里,搭建网络非常方便,就像搭积木一样,有固定的步骤。
首先,调用 model = Sequential(),表明开始搭建模型
然后,调用各种model.add(X),来搭建网络即可,X代表不同的网络层,不同网络层的定义可以参考keras的API。不过只看API不能学会keras,需要对他背后的概念有深刻的理解。现在不理解不用着急,以后我们会逐步讲解。
再次,调用model.compile,指定loss和optimizer,完成网络搭建。
3 训练神经网络
训练网络,永远只有一句话,调用model.fit
看似简单的一句话,背后执行的动作千差万别,这就是keras为我们提供的封装
4 评估网络效果
通过新的数据来评估网络效果
5 使用网络预测
调用model.predict(t),输入结果为[[4040.053 ] [8080.1074]]
至此,我们已经训练了一个神经网络,他可以用来计算乘法。可能你会觉得奇怪,这么大费周章的搞个乘法,意义何在?这个神经网络的功能不就是等价于如下语句么?
b = a * 2
没错,对于这个神经网络来说,的确如此,然而,神经网络能干的不止如此。
还是同样的代码,只要你改变下生成数据的方式,重新训练之后,你会发现,神经网络可以计算 b = a * 3 或者b = a * 4了,是不是很神奇?
今天,我们简单学习了神经网络的步骤,万变不离其宗,以后无论我们学习多么复杂的网络,都在这几步当中,并且,其中每一步都可以展开,有无数的知识需要学习。
不过不要着急,只要我们理解了基础框架,剩下一步步的填充,每天进步一点点,迟早能达成目标。
课后作业
1 亲自运行代码,并将结果发布在评论中
2 修改代码,让神经网络可以计算 b = a - 3
3 将keras中文文档添加到浏览器的收藏中,方便以后查找