keras构造神经网络,非常之方便!以后就它了。本文给出了三个例子,都是普通的神经网络

例一、离散输出,单标签、多分类

例二、图像识别,单标签、多分类。没有用到卷积神经网络(CNN)

例三、时序预测,单标签、多分类。(LSTM)

说明

keras对于神经网络给出的流程图,非常容易理解。

图片来源:https://www.jianshu.com/p/6c08f4ceab4c

【重点】训练神经网络围绕以下对象:
  1. 层,用于合并成网络(或模型)
  2. 输入数据和相应的目标
  3. 损失函数,  定义了用于学习的反馈信号
  4. 优化器,  这决定了学习如何进行

例一

离散输出,单标签、多分类

本例来源:https://www.jianshu.com/p/f1332c58ca86

数据来源:https://blog.csdn.net/weixin_41090915/article/details/79521161

数据是自己构造的,分有三类,如图

图片来源:https://blog.csdn.net/weixin_41090915/article/details/79521161

import numpy as np
import pandas as pd # =====================================================
# 准备数据
N = 100 # number of points per class
D = 2 # dimensionality
K = 3 # number of classes
X = np.zeros((N * K, D)) # data matrix (each row = single example)
y = np.zeros(N * K, dtype='uint8') # class labels
for j in range(K):
ix = list(range(N*j, N*(j + 1)))
r = np.linspace(0.0, 1, N) # radius
t = np.linspace(j*4, (j+1)*4, N) + np.random.randn(N)*0.2 # theta
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j # 打标签 # 将y转化为one-hot编码
#y = (np.arange(K) == y[:,None]).astype(int)
y = np.eye(K)[y]
# ===================================================== from keras import models
from keras import layers # 使用Sequential类定义两层模型
model = models.Sequential()
model.add(layers.Dense(10, activation='relu', input_shape=(2,)))
model.add(layers.Dense(3, activation='softmax')) # 编译。指定模型的优化器、损失函数、监控指标。
# 对于一个两类分类问题,您将使用二元交叉熵(binary crossentropy)
# 对于一个多类分类问题使用分类交叉熵(categorical crossentropy)
# 对于回归问题使用均方差(meansquared error)
# 对于序列学习问题使用连接主义时间分类(connectionist temporal classification, CTC)
from keras import optimizers
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
'''
from keras import optimizers
from keras import losses
from keras import metrics
#from keras import optimizers, losses, metrics
model.compile(optimizer=optimizers.RMSprop(lr=0.001),
loss=losses.binary_crossentropy,
metrics=[metrics.binary_accuracy])
''' # 训练网络
model.fit(X, y, batch_size=50, epochs=1000) # =====================================================
# 重新生成数据
X = np.zeros((N * K, D)) # data matrix (each row = single example)
y = np.zeros(N * K, dtype='uint8') # class labels
for j in range(K):
ix = list(range(N*j, N*(j + 1)))
r = np.linspace(0.0, 1, N) # radius
t = np.linspace(j*4, (j+1)*4, N) + np.random.randn(N)*0.2 # theta
X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
y[ix] = j # 打标签 # 将y转化为one-hot编码
#y = (np.arange(K) == y[:,None]).astype(int)
y = np.eye(K)[y]
# ===================================================== #检查模型在测试集上的表现是否良好
test_loss, test_acc = model.evaluate(X, y)
print('test_acc:', test_acc)

注意:就本例而言,如果标签数据不进行one-hot编码,则损失函数要更改为:loss='sparse_categorical_crossentropy',

效果图

例二

图像识别,没有用到卷积神经网络(CNN)

本例来源:https://www.jianshu.com/p/ba51e470b736

手写数字的识别,如图

'''
试图解决的问题是对灰度图像进行分类的手写数字(28×28个像素)到他们的10个分类(0到9)。
'''
# 导入数据
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 了解数据情况
#test_images.shape # (10000, 28, 28)
#test_labels # array([7, 2, 1, ..., 4, 5, 6], dtype=uint8) # 将输入数组形状由(60000,28,28)转换为(60000,28 * 28)
train_images = train_images.reshape((60000, 28 * 28))
test_images = test_images.reshape((10000, 28 * 28)) # 将[0,255]区间的整数转换为[0,1]之间的浮点数
train_images = train_images.astype('float32') / 255
test_images = test_images.astype('float32') / 255 # 对分类标签y进行one-hot编码
from keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels) from keras import models
from keras import layers
network = models.Sequential() #我们的网络由两个密集层(Dense layers)组成,它们紧密连接(也称为完全连接)神经层。
#第二个(也是最后一个)层是10路softmax层,这意味着它将返回一个包含10个概率分数的数组(总和为1),
#每个分数都将是当前数字图像属于我们的10个分类之一的概率。
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax')) #为了使网络为训练做好准备,我们需要再选择三样东西,作为编译步骤的一部分:
#损失函数: 网络如何能够测量它在训练数据上的表现,如何能够引导自己走向正确的方向
#优化器:网络根据所接收的数据及其损失函数进行自我更新的机制
#监控指标:这里,我们在训练和测试期间只关心准确性(正确分类的图像的一部分)
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy']) #训练这个网络
network.fit(train_images, train_labels, epochs=5, batch_size=128) #检查模型在测试集上的表现是否良好
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

效果图

例三

时间序列预测(LSTM)

本例来源:https://blog.csdn.net/zwqjoy/article/details/80493341

字母表的一个简单的序列预测问题。
也就是说,根据字母表的字母,预测字母表的下一个字母。
['A', 'B', 'C'] -> D
['B', 'C', 'D'] -> E
['C', 'D', 'E'] -> F
['D', 'E', 'F'] -> G
['E', 'F', 'G'] -> H
['F', 'G', 'H'] -> I
['G', 'H', 'I'] -> J
['H', 'I', 'J'] -> K
['I', 'J', 'K'] -> L
['J', 'K', 'L'] -> M
['K', 'L', 'M'] -> N
['L', 'M', 'N'] -> O
['M', 'N', 'O'] -> P
['N', 'O', 'P'] -> Q
['O', 'P', 'Q'] -> R
['P', 'Q', 'R'] -> S
['Q', 'R', 'S'] -> T
['R', 'S', 'T'] -> U
['S', 'T', 'U'] -> V
['T', 'U', 'V'] -> W
['U', 'V', 'W'] -> X
['V', 'W', 'X'] -> Y
['W', 'X', 'Y'] -> Z

注意数据格式

X.shape: [samples, time_step, features]

y.shape: [samples, one_hot_encodes]

代码:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.utils import np_utils '''
字母表的一个简单的序列预测问题。
''' np.random.seed(7) # 原生数据
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 转为数字
data_len = 26
time_steps = 3
X = list(range(data_len))
y = X[time_steps:] # 将数据转化为[样本数, 时间步数, 特征数]的形式
XX = [X[i:i+time_steps] for i in range(data_len-time_steps)] # [samples, time steps * features]
XXX = np.reshape(XX, (data_len - time_steps, time_steps, -1)) # [samples, time steps, features] # 归一化
# 数值范围变为0~1,这是LSTM网络使用的s形激活函数(sigmoid)的范围。
X = XXX / data_len
# one-hot编码
#y = np_utils.to_categorical(dataY)
y = np.eye(data_len)[y] # =================================
model = Sequential()
model.add(LSTM(32, input_shape=(X.shape[1], X.shape[2])))
model.add(Dense(y.shape[1], activation='softmax')) # 输出各类的概率(softmax)
model.compile(loss='categorical_crossentropy', # 单标签,多分类(categorical_crossentropy)
optimizer='adam',
metrics=['accuracy']) model.fit(X, y, epochs=500, batch_size=1, verbose=2) #检查模型在测试集上的表现是否良好
test_loss, test_acc = model.evaluate(X, y)
print('test_acc:', test_acc)

效果图

keras神经网络三个例子的更多相关文章

  1. css通用小笔记02——浮动、清除(三个例子)

    css中通常会用到浮动与清除,也是一个必须掌握的知识点,概念性的东西不多说,下面举几个例子,来说明它的用法:1.文字环绕效果  2.多个div并排显示 3.清除浮动(默认显示) 一.文字环绕效果: h ...

  2. 统计学习方法笔记--EM算法--三硬币例子补充

    本文,意在说明<统计学习方法>第九章EM算法的三硬币例子,公式(9.5-9.6如何而来) 下面是(公式9.5-9.8)的说明, 本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流 ...

  3. golang关键字select的三个例子, time.After模拟socket/心跳超时

    golang关键字select的三个例子, time.After模拟socket/心跳超时   例子1 select会随机选择一个可执行的case   // 这个例子主要说明select是随机选择一个 ...

  4. Keras神经网络集成技术

    Keras神经网络集成技术 create_keras_neuropod 将Keras模型打包为神经网络集成包.目前,上文已经支持TensorFlow后端. create_keras_neuropod( ...

  5. Theano入门神经网络(三)

    附录一个:Keras学习随笔 http://blog.csdn.net/niuwei22007/article/details/49045909 参考 <Python Machine Learn ...

  6. Keras(三)backend 兼容 Regressor 回归 Classifier 分类 原理及实例

    backend 兼容 backend,即基于什么来做运算 Keras 可以基于两个Backend,一个是 Theano,一个是 Tensorflow 查看当前backend import keras ...

  7. Keras神经网络data generators解决数据内存

    在使用kears训练model的时候,一般会将所有的训练数据加载到内存中,然后喂给网络,但当内存有限,且数据量过大时,此方法则不再可用.此博客,将介绍如何在多核(多线程)上实时的生成数据,并立即的送入 ...

  8. 一文上手Tensorflow2.0之tf.keras(三)

    系列文章目录: Tensorflow2.0 介绍 Tensorflow 常见基本概念 从1.x 到2.0 的变化 Tensorflow2.0 的架构 Tensorflow2.0 的安装(CPU和GPU ...

  9. TControl的显示函数(5个非虚函数,4个虚函数)和三个例子的执行过程(包括SetParent的例子)

    // 9个显示函数 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual; // 虚函数,important 根据父控 ...

随机推荐

  1. 环信easeui集成:坑总结2018

    环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改. 该篇文章将解决的问题: 1.如何将App用户体系的用户名和用户头像 显示于环信的easeui 2.如何 ...

  2. Android为TV端助力 MediaPlayer API大全已经方法详解(转载)

    通过这张图,我们可以知道一个MediaPlayer对象有以下的状态: 1)当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态.当调用了rele ...

  3. Linux中对swap分区的配置

    swap分区的安装与正常分区的安装大致相同,我这里就只说一下不同 大家可先看我上一篇的安装:https://www.cnblogs.com/feiquan/p/9219447.html 1.查看swa ...

  4. Weblogic java生成wlfullclient.jar

    进入weblogic的server\lib目录 cd G:\Oracle\Middleware\wlserver_10.3\server\lib 运行 java -jar G:\Oracle\Midd ...

  5. SqlServer跨集群升级

    SqlServer跨集群升级 1.新Server的IP要和旧的在同一网段. 2.安装SQL SERVER(注意:排序要和以前的一样,更改TempDB位置) 3.开启防火墙,并打开1433和5022端口 ...

  6. perl语言中的.pm文件和.pl文件区别

    perl...呵呵呵 按照惯例,.pm 应该保存 Perl Module,也就是 Perl 模块.例如 Socket.pm.pl 应该保存 Perl Library,也就是 Perl 库文件.例如 p ...

  7. http协议与https协议

    1.前言 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应用层分别为:物理层.链路层.网络层.传输层和应用层,如下图所示: 2.http协议简介 ...

  8. VS快捷键失效问题

    VS作为宇宙最强IDE,为我们提供了强大的快捷键组合,熟练的使用这些快捷键能极大提高我们的编码效率,但是在我们实际使用的过程中经常会遇到某个快捷键组合失效的问题. 问题原因: 一般都是VS的快捷键与电 ...

  9. 一个tomcat部署多个应用实例

    安装JDK7sudo apt-get install java7-jdk 安装tomcat7 Tomcat7下载地址http://mirror.bjtu.edu.cn/apache/tomcat/to ...

  10. 阿里云短信服务调用例子-Python

    阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...