使用Keras构建神经网络的基本工作流程主要可以分为 4个部分。(而这个用法和思路,很像是在使用Scikit-learn中的机器学习方法)

Model definition → Model compilation → Training → Evaluation and Prediction
 
 
以下为实践的步骤:
首先 人为地造一组由 y=0.5x+2 加上一些噪声而生成的数据,数据量一共有200个,其中160作为train set ,后40作为test set
# # 首先 人为地造一组由 y=0.5x+2 加上一些噪声而生成的数据,数据量一共有200个,其中160作为train set ,后40作为test set
import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-2,6,200)
np.random.shuffle(X)
Y = 0.5 * X +2+0.15*np.random.randn(200,) # plot data
plt.scatter(X,Y)
plt.show() X_train, Y_train = X[:160], Y[:160] #train first 160 data points
X_test, Y_test = X[160:], Y[160:] # test remaining 40 data points

绘制出的数据的分布情况如下:

 
1、首先执行构建模型的第一步,即 Model Definition
这一步的作用就是定义NN中的层次结构。为此要引入两个重要的类,Sequential和Dense
from keras.models import Sequential
from keras.layers import Dense

(1)Sequential是Keras中构建NN最常用的一种Model(也是最简单的一种),一个Sequential的Model 就是 a linear stack of layers,也就是说,你只要按顺序(使用add()方法)一层一层地顺序地添加神经网络层就可以了。

(2)Dense表示全连接层,此时它需要接收两个参数,即输入的节点数及输出的节点数,特别地,在一层一层地构建NN时,Keras还可以根据上一层的输出来推断下一次的输入,所以有些全连接层参数可以省略。
在这个简单的例子中,我们的全连接层只有一层,而且输入的节点数和输出的节点数都为1,所以有:
model = Sequential()
model.add(Dense(output_dim = 1, input_dim = 1))
2、接下来执行构建模型的第二步,即Model compilation
这一步是要指定模型中的loss function(在这例子中使用的是最小二乘误差  ‘mse’ ),优化器以及metrics等内容。优化器你可以使用系统提供的默认优化器,例如你可以像下面这样用 'sgd' 表示随机梯度下降。
model.compile(loss='mse', optimizer='sgd')
也可以像下面这样自定义优化器中的参数:
from keras.optimizers import SGD
model.compile(loss='mse', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))
3、接下来执行构建模型的第三步,即 Training:
有两个选择:
(1)第一种直接使用 fit,和Scikit-learn特别像!你只要在 fit 方法的参数列表中指定训练数据(特征向量和label)、训练的次数和用来做梯度下降的 batch size 就可以了。
model.fit(X_train, Y_train, epochs=100, batch_size=64)
(2)另外一个选择是你也可以采用下面的语法来 feed batches to your model manually:
model.train_on_batch(x_batch, y_batch)  # 运行一批样品的单次梯度更新。
例如在本例中你可以把训练部分写成下面这种形式,其中每20步,我们会输出一次cost。
print('Training -----------')
for step in range(100):
cost = model.train_on_batch(X_train, Y_train)
if step % 20 == 0:
print('train cost: ', cost)
 
 程序输出结果如下(注意由于存在各种随机性,每次的输出未必完全一致):

4、最后进入第四步:Evaluation and Prediction的部分。对于之前预留的测试集来说,你可以使用:
cost = model.evaluate(X_test, Y_test, batch_size=40)

具体来说针对上面这个例子则有:

print('\nTesting -------------')
loss_and_metrics =model.evaluate(X_test,Y_test,batch_size=40)
print('test cost:',loss_and_metrics)
W,b = model.layers[0].get_weights()
print('Weights= ',W, '\n biases=',b)
程序输出结果如下:

那么对一些新的数据进行预测的话,可以使用 predict,而且它的使用也与Scikit-learn中的用法及其相似, 最终我们预测test set 中的每个的点,并绘制预测的模型。

Y_pred =model.predict(X_test)
plt.scatter(X_test,Y_test)
plt.plot(X_test,Y_test)
plt.show()

5、最后附上完整的代码文件:

import numpy as np
import theano.tensor as T
import keras
from keras import backend as K
from keras import initializations
# from keras import initializers ###### In Keras 2.0, initializations was renamed (mirror) as initializers.
from keras.models import Sequential, Model, load_model, save_model
from keras.layers.core import Dense, Lambda, Activation
from keras.layers import Embedding, Input, Dense, merge, Reshape, Merge, Flatten
from keras.optimizers import Adagrad, Adam, SGD, RMSprop
from keras.regularizers import l2
from Dataset import Dataset
from evaluate import evaluate_model
from time import time
import multiprocessing as mp
import sys
import math
import argparse print(keras.__version__) # 使用的默认的Backend:TensorFlow #修改 # # 首先 人为地造一组由 y=0.5x+2 加上一些噪声而生成的数据,数据量一共有200个,其中160作为train set ,后40作为test set
import numpy as np
import matplotlib.pyplot as plt X = np.linspace(-2,6,200)
np.random.shuffle(X)
Y = 0.5 * X +2+0.15*np.random.randn(200,) # # plot data
# plt.scatter(X,Y)
# plt.show() X_train, Y_train = X[:160], Y[:160] #train first 160 data points
X_test, Y_test = X[160:], Y[160:] # test remaining 40 data points # 第一步,即 Model Definition:
from keras.models import Sequential
from keras.layers import Dense model = Sequential()
model.add(Dense(output_dim=1, input_dim=1)) # 第二步,即Model compilation:
model.compile(loss='mse',optimizer='sgd') # 第三步,即 Training:
# model.fit(X_train,Y_train,epochs=100,batch_size=64) # epochs=100会报错是怎么回事
# 或者:
print('Training ----------------')
for step in range(100):
cost = model.train_on_batch(X_train,Y_train)
if step %20 ==0:
print('train cost: ',cost) # 第四步:Evaluation and Prediction的部分
# cost=model.evaluate(X_test,Y_test,batch_size=40)
# 具体来说针对我们现在这个例子则有:
print('\nTesting -------------')
loss_and_metrics =model.evaluate(X_test,Y_test,batch_size=40)
print('test cost:',loss_and_metrics)
W,b = model.layers[0].get_weights()
print('Weights= ',W, '\n biases=',b) # 那么对一些新的数据进行预测的话,可以使用 predict,而且它的使用也与Scikit-learn中的用法及其相似,
# 最终我们预测test set 中的每个的点,并绘制预测的模型。
Y_pred =model.predict(X_test)
plt.scatter(X_test,Y_test)
plt.plot(X_test,Y_test)
plt.show()

【Reference】

1、https://blog.csdn.net/baimafujinji/article/details/78384792

Keras 入门实例的更多相关文章

  1. React 入门实例教程(转载)

    本人转载自: React 入门实例教程

  2. struts入门实例

    入门实例 1  .下载struts-2.3.16.3-all  .不摆了.看哈就会下载了. 2  . 解压  后 找到 apps 文件夹. 3.    打开后将 struts2-blank.war   ...

  3. Vue.js2.0从入门到放弃---入门实例

    最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用 ...

  4. wxPython中文教程入门实例

    这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下     wxPython中文教程入门实例 wx.Window 是一个基类 ...

  5. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

  6. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  7. Node.js入门实例程序

    在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...

  8. Java AIO 入门实例(转)

    Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: public class SimpleServer { public SimpleServer(int port ...

  9. Akka入门实例

    Akka入门实例 Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. Actor模型并非什么新鲜事物,它由Carl Hew ...

随机推荐

  1. 理解了quote和 symbol-list的 关系

    'x   ===  (quote x) '(x) ===  (list 'x)

  2. Message "'OFFSET' 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效。" 解决办法 EntityFrameworkCore

    由于新版的EntityFrameworkCore默认使用的是SqlServer2012或以上版本的Sql语法分页,来提高性能. 所以使用数据库的版本如果低于2012(如Sqlserver2008)需要 ...

  3. os.path.join()函数的用法

    转:https://blog.csdn.net/hduxiejun/article/details/80289476   os.path.join()函数:连接两个或更多的路径名组件 1.如果各组件名 ...

  4. HTML惊天地

    博主网站 一.HTML文档结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  5. Cocos Creator 返回字符串长度(字符),汉字计数为2

    function strLength(str) { var a = 0; for (var i = 0; i < str.length; i++) { if (str.charCodeAt(i) ...

  6. Mycat高可用解决方案一(mysql安装)

    Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...

  7. 【会话技术】Cookie技术 案例:访问时间

    创建时间:6.30 代码: package cookie; import java.io.IOException; import java.text.SimpleDateFormat; import ...

  8. centos7下搭建JDK和Hadoop

    涉及基础操作命令 这里只是将涉及到的提了下一下具体的使用还需要读者自己查阅资料 tar 解压命令 su 进入root用户模式 rm -rf 删除 cd /文件名/.../ 进入某个文件夹下 注意要逐层 ...

  9. SpringBoot——IDEA使用 Spring Initializer快速创建项目【四】

    前言 使用Spring Initializer快速创建项目 步骤 首先肯定是打开我们的IDEA的编辑器呀~ 创建项目 File -> New -> Project Spring Initi ...

  10. MapReduce running in uber mode (jvm重用)

    原文 http://blog.csdn.net/samhacker/article/details/15692003 yarn-site.xml  主要是这几个参数 - mapreduce.job.u ...