基于keras库训练BP神经网络的实例

【python股票价格预测】使用Keras库实现BP神经网络的多变量股票价格预测(附python代码) 阅读详情

写在前面

最近学习了深度学习中最基础的一种神经网络——BP神经网络。经过数学推导之后,我的感悟:

1.BP神经网络是一种对人脑神经网络的一种抽象化的“仿生”。我们知道,人的大脑中有成千上万的神经元,这些神经元本身不复杂,但神经元之间错综复杂的连接使得人脑可以迅速处理信息和学习等。BP神经网络中每个节点都好比一个“神经元”,当INPUT(类比激励)超过一定阈值时,经激活函数计算的OUTPUT达到较高水平(类比神经元兴奋),向输出层传导。

2.BP神经网络本质上是以网络输出与实际输出的误差为评估函数(它是各层权重和偏倚的函数),以各层权重和偏倚为自变量,采用梯度下降法,通过不断迭代改变各层权重和偏倚(也就是训练网络的过程),最终实现误差最小的一种前馈型神经网络。

3.在推导的过程中要多次用到复合函数求导法则。我推导时使用的激励函数是sigmoid函数,它的导数与函数本身有关系,利用这点可以化简结果。

学习了BP神经网络的原理后,我使用python的keras库来训练一个BP神经网络的实例

1.数据集准备

下表由雇员数据库的训练数据组成。数据已泛化,例如,age “31–35"表示年龄在31~ 35之间。对于给定的行,count表示department, status, age和salary在该行具有给定值的元组数。设status是类标号属性。

pic0

1.1数据集生成

import numpy as np
import matplotlib.pyplot as plt
data=np.array([[0,0,2,4,30],
      [0,1,1,0,40],
     [0,1,2,1,40],
     [1,1,0,4,20],
     [1,0,2,5,5],
     [1,1,1,4,3],
     [1,0,4,5,3],
     [2,0,3,4,10],
     [2,1,2,3,4],
     [3,0,5,2,4],
     [3,1,1,0,6]])
data
array([[ 0,  0,  2,  4, 30],
       [ 0,  1,  1,  0, 40],
       [ 0,  1,  2,  1, 40],
       [ 1,  1,  0,  4, 20],
       [ 1,  0,  2,  5,  5],
       [ 1,  1,  1,  4,  3],
       [ 1,  0,  4,  5,  3],
       [ 2,  0,  3,  4, 10],
       [ 2,  1,  2,  3,  4],
       [ 3,  0,  5,  2,  4],
       [ 3,  1,  1,  0,  6]])
#生成训练集和目标
X_train,y_train = data[:,[0,2,3,4]],data[:,1]
X_train
array([[ 0,  2,  4, 30],
       [ 0,  1,  0, 40],
       [ 0,  2,  1, 40],
       [ 1,  0,  4, 20],
       [ 1,  2,  5,  5],
       [ 1,  1,  4,  3],
       [ 1,  4,  5,  3],
       [ 2,  3,  4, 10],
       [ 2,  2,  3,  4],
       [ 3,  5,  2,  4],
       [ 3,  1,  0,  6]])
y_train
array([0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1])

1.2数据标准化

#定义数据处理函数
def stand(a):
    a = a.astype(float)
    max1 = a.max()
    min1 = a.min()
    range1 = max1 - min1
    if range1 == 0:
        return [0]*len(a)
    else:
        for i in range(len(a)):
            a[i] = (a[i] - min1)/range1
        return a    
X_train = X_train.astype(float)
for i in range(len(X_train[0])):
    X_train[:,i] = stand(X_train[:,i])
#标准化后的训练集
X_train
array([[0.        , 0.4       , 0.8       , 0.72972973],
       [0.        , 0.2       , 0.        , 1.        ],
       [0.        , 0.4       , 0.2       , 1.        ],
       [0.33333333, 0.        , 0.8       , 0.45945946],
       [0.33333333, 0.4       , 1.        , 0.05405405],
       [0.33333333, 0.2       , 0.8       , 0.        ],
       [0.33333333, 0.8       , 1.        , 0.        ],
       [0.66666667, 0.6       , 0.8       , 0.18918919],
       [0.66666667, 0.4       , 0.6       , 0.02702703],
       [1.        , 1.        , 0.4       , 0.02702703],
       [1.        , 0.2       , 0.        , 0.08108108]])

2.创建bp神经网络

#导入相关库
from keras.models import Sequential
from keras.layers import Dense, Activation
Using TensorFlow backend.
#生成Sequential 顺序模型
model = Sequential()

#创建两个layer
layer1 = Dense(2, input_shape=(4,),activation='sigmoid')
layer2 = Dense(1,activation='sigmoid')

#使用 .add() 来堆叠模型
#现在模型会以尺寸为 (*, 4) 的数组作为输入,其输出数组的尺寸为 (*, 2)
model.add(layer1)
#在第一层之后,就不再需要指定输入的尺寸了
model.add(layer2)

#使用 .compile() 来配置学习过程
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
WARNING:tensorflow:From E:\anaconda\anaconda1\lib\site-packages\tensorflow\python\ops\resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
#查看隐层的初始权重和偏倚
layer1.get_weights()
[array([[-0.47375464, -0.5235982 ],
        [-0.38250756, -0.74181414],
        [-0.2465694 ,  0.55842113],
        [ 0.11825562, -0.3772707 ]], dtype=float32),
 array([0., 0.], dtype=float32)]
#查看输出层的初始权重和偏倚
layer2.get_weights()
[array([[ 0.09723485],
        [-0.49100333]], dtype=float32), array([0.], dtype=float32)]

3.先模拟一下梯度下降法的原理

X0 = np.array([[0.        , 0.4       , 0.8       , 0.72972973]])
y0 = np.array([[0]])
#未训练前先看看输出的结果
model.predict(X0, batch_size=1)
array([[0.45316178]], dtype=float32)
#只用这个样本迭代model一次
model.fit(X0, y0, epochs=1, batch_size=1)
WARNING:tensorflow:From E:\anaconda\anaconda1\lib\site-packages\tensorflow\python\ops\math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Epoch 1/1
1/1 [==============================] - 0s 177ms/step - loss: 0.6036 - accuracy: 1.0000

<keras.callbacks.callbacks.History at 0x1ab3c6be408>
#查看隐层的此时的权重和偏倚
layer1.get_weights()
[array([[-0.47375464, -0.5235982 ],
        [-0.38566962, -0.73865193],
        [-0.24973156,  0.5615834 ],
        [ 0.11509346, -0.37410843]], dtype=float32),
 array([-0.00316219,  0.00316226], dtype=float32)]
#查看输出层的此时的权重和偏倚
layer2.get_weights()
[array([[ 0.09407257],
        [-0.4941656 ]], dtype=float32), array([-0.00316228], dtype=float32)]
#再看看更新后输出的结果
model.predict(X0, batch_size=1)
array([[0.4513354]], dtype=float32)

可以发现此时隐层和输出层的权重和偏倚已经更新(符合用S型激励函数所推导的更新公式),在更新后输出结果由0.45316178变为0.4513354,向着真实值0接近

4.正式训练模型

# 训练模型,以 11个样本为一个 batch 进行迭代,迭代10000次
model.fit(X_train, y_train, epochs=10000, batch_size=11)
#输出最终的损失值和评估值
loss_and_metrics = model.evaluate(X_train, y_train, batch_size=11)
print("loss is",loss_and_metrics[0])
print("metrics is",loss_and_metrics[1])
11/11 [==============================] - 0s 4ms/step
loss is 0.0003669886791612953
metrics is 1.0
#查看隐层的最终的权重和偏倚
layer1.get_weights()
[array([[  1.6629684,  -1.1666613],
        [-10.349615 ,   9.213103 ],
        [ -8.158486 ,   7.631497 ],
        [ -1.920792 ,   1.9880017]], dtype=float32),
 array([ 9.8020735, -9.160663 ], dtype=float32)]
#查看输出层的最终的权重和偏倚
layer2.get_weights()
[array([[ 10.038265],
        [-10.15324 ]], dtype=float32), array([0.28461477], dtype=float32)]
#查看最终收敛后输出的结果
y_predict = model.predict(X_train, batch_size=11)
y_predict
array([[4.1028857e-04],
       [9.9996442e-01],
       [9.9965948e-01],
       [9.9988532e-01],
       [6.3014030e-04],
       [9.9921250e-01],
       [5.5342913e-05],
       [4.4330955e-04],
       [9.9929118e-01],
       [4.7654950e-04],
       [9.9996698e-01]], dtype=float32)

可以看出,输出的结果与真实值之间非常接近,说明模型对这个数据集训练效果较好(但本训练集数据较少且可能存在过拟合情况)

5.初步调参

思考:
1.一开始选择隐层的节点时选择了两个结点,是不是最优选择?
2.迭代次数选择10000是不是最优选择呢?

5.1最优隐层节点数的调整

#将隐层结点设为3个,其余不变
model2 = Sequential()
model2.add(Dense(3, input_shape=(4,),activation='sigmoid'))
model2.add(Dense(1,activation='sigmoid'))
model2.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model2.fit(X_train, y_train, epochs=10000, batch_size=11)
loss_and_metrics2 = model2.evaluate(X_train, y_train, batch_size=11)
print("loss is",loss_and_metrics2[0])
print("metrics is",loss_and_metrics2[1])
loss is 6.332933480734937e-06
metrics is 1.0
#将隐层结点设为4个,其余不变
model3 = Sequential()
model3.add(Dense(4, input_shape=(4,),activation='sigmoid'))
model3.add(Dense(1,activation='sigmoid'))
model3.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model3.fit(X_train, y_train, epochs=10000, batch_size=11)
loss_and_metrics3 = model3.evaluate(X_train, y_train, batch_size=11)
print("loss is",loss_and_metrics3[0])
print("metrics is",loss_and_metrics3[1])
loss is 5.404044145507214e-07
metrics is 1.0
#绘图
plt.plot([2,3,4],[loss_and_metrics[0],loss_and_metrics2[0],loss_and_metrics3[0]])
plt.xlabel("number of hidden layer nodes")
plt.ylabel("the final loss")
plt.show()

pic1

由图像可知,隐层选择三个节点的效果应该最好,既避免了空间浪费也保证了精度

5.2最优迭代次数的调整

#选择隐层3个节点,将迭代次数调整为5000次,其余不变
model4 = Sequential()
model4.add(Dense(3, input_shape=(4,),activation='sigmoid'))
model4.add(Dense(1,activation='sigmoid'))
model4.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model4.fit(X_train, y_train, epochs=5000, batch_size=11)
loss_and_metrics4 = model4.evaluate(X_train, y_train, batch_size=11)
print("loss is",loss_and_metrics4[0])
print("metrics is",loss_and_metrics4[1])
loss is 0.01632225513458252
metrics is 1.0
#选择隐层3个节点,将迭代次数调整为15000次,其余不变
model5 = Sequential()
model5.add(Dense(3, input_shape=(4,),activation='sigmoid'))
model5.add(Dense(1,activation='sigmoid'))
model5.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model5.fit(X_train, y_train, epochs=15000, batch_size=11)
loss_and_metrics5 = model5.evaluate(X_train, y_train, batch_size=11)
print("loss is",loss_and_metrics5[0])
print("metrics is",loss_and_metrics5[1])
loss is 1.373911260316163e-07
metrics is 1.0
#绘图
plt.plot([5000,10000,15000],[loss_and_metrics4[0],loss_and_metrics2[0],loss_and_metrics5[0]])
plt.xlabel("number of epochs")
plt.ylabel("the final loss")
plt.show()

pic2

由图像可知,迭代次数选择10000次附近的效果应该较好,如果想要得到更优的epochs可以在10000附近进一步搜索

6.问题解决汇总

 1.运行keras时报错:cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA

解决方法:cuda与显卡驱动不匹配,或者使用anaconda安装tensorflow时cudnn、tensorflow-gpu和cudatoolkit版本不匹配。可以降低cudnn和tensorflow-gpu等的版本与显卡驱动匹配。
链接:CUDA工具包和兼容的驱动程序版本
链接:tensorflow-gpu与cuda、cudnn匹配版本

2.numpy数组标准化时全部变为整数,而不是0-1之间的浮点数

解决方法:numpy数组的dtype为int,应该使用array = array.astype(float)将整型数组变为浮点型数组后,再存储标准化后的数据

BP神经网络的Python实现详细指南 误差函数(Error Function),也称目标函数,是衡量神经网络输出与真实值之间差异的函数。在BP神经网络中,误差函数的目的是提供一个衡量标准,用以指导网络权重的调整,使网络输出尽可能接近目标输出。误差函数通常是一个关于网络输出和目标值的数学表达式,它反映了预测值与实际值之间的不一致程度。在实际应用中,误差函数一般选择为均方误差(Mean Squared Error,MSE)或交叉熵损失(Cross-Entropy Loss)。动量法(Momentum) 阅读详情

相关推荐

BP算法神经网络的实现与应用

构建和训练神经网络需要强大的数学运算和优化算法支持。Python神经网络库的选择是至关重要的,下面简要介绍几个流行的库。西瓜数据集(Watermelon Dataset)是一个经典的机器学习数据集,由各类西瓜的属性以及对应的品质标签组成。数据集通常包含多个维度的特征,如色泽、根蒂、敲声等物理属性,以及最终的品质分类(好瓜或坏瓜)。这些特征和分类标签构成了西瓜数据集的核心内容。在实际应用中,西瓜数据集是评估分类算法的常用数据集之一,通过模型对数据进行训练和预测,以判定西瓜是否品质上乘。

weixin_35935514的博客 785

江科大数据挖掘实验三

江科大数据挖掘实验三

qq_53741629的博客 833

R语言实现BP神经网络实战教程

R语言是一种用于统计分析和图形表示的编程语言,广泛应用于数据分析和机器学习领域。它的优点在于拥有庞大的统计分析和数据处理的包,以及直观的图形展示功能。R语言支持多种数据结构,如向量、数组、矩阵、数据框等,这使得它在处理各类数据上具有极大的灵活性。BP神经网络是一种多层前馈神经网络,它的特点是可以自动从输入数据中学习,通过网络内部的层次结构来提取数据特征,并能够处理非线性问题。BP神经网络的主要特点包括:层次结构:BP神经网络通常包含输入层、隐藏层和输出层。隐藏层可以有一个或多个。

weixin_31720909的博客 766

数据挖掘第三版课后题答案

写在前面 该文为数据挖掘概念与技术第三版课后习题的答案,部分参考了第二版的英文答案,由于个人水平有限,如若存在纰漏,请在评论区批评指正。另外,由于本次编辑格式较乱,可在资源下载区下载PDF版本以便参考。 第一章 引论 什么是数据挖掘?在你的回...

sudo_feng的博客 7万+

神经网络:从理论到实践

神经网络(Neural Networks)是一种受人脑启发而构建的信息处理系统,它由大量简单且高度互连的处理单元(神经元)组成。这一理论模型是人工智能研究的核心,能够执行从分类到回归等一系列复杂任务。TensorFlow是一个开源的机器学习框架,由Google大脑团队开发。其核心是一个用于数据流编程的库,特别是可以适用于大规模数值计算的复杂算法。TensorFlow的架构设计非常灵活,提供了丰富的API,允许研究人员和开发者构建和训练各种类型的神经网络模型。

weixin_31869917的博客 759

本博客基于tensorflow2.keras,搭建一个简单的BP网络,用于简单的数据分类任务,并采用粒子群算法实现网络权重

本博客基于tensorflow2.keras,搭建一个简单的BP网络,用于简单的数据分类任务,并采用粒子群算法实现网络权重

贝叶斯分类器(matlab)

目标 下表由雇员数据库的训练数据组成。数据已泛化。例如,age“3135”表示年龄在31~35之间。对于给定的行,count表示department、status、age和salary在该行具有给定值的元组数。 Department Status Age Salary Count Sales Senior 31-35 46K-50K 30 Sales junior 26-30 26K-30K 40 Sales junior 31-35 31K-35K 40 sysytems ju

algorithem的博客 5723

避坑指南:PCIe设备兼容性那些坑——聊聊MPS/MRRS设置不当引发的血泪史

本文深入探讨了PCIe设备兼容性问题,特别是MPS/MRRS参数设置不当引发的常见故障。通过详细解析MPS(Max Payload Size)和MRRS(Max Read Request Size)的作用机制,提供Linux内核五大配置策略的对比分析,并分享FPGA加速卡等实战案例的排查经验。文章还介绍了诊断工具链、动态调试技巧以及性能优化方法,帮助工程师有效解决PCIe兼容性难题。

weixin_30872499的博客 419

下表由雇员数据库的训练数据组成。数据已泛化。例如, age “31..35“表示年龄在31~35之间。对于给定的行, count 表示 de partment , status , age 和 sal

题目: 参考答案:

m0_58606960的博客 969

KALI虚拟机挂代理教程

需要你本地挂了代理,然后通过虚拟机连接本机代理端口,不说废话了,直接说怎么做了。 1.查看选项设置中自己的小飞机的本地端口是多少:(默认是1080) 2.本机win+r打开cmd,输入ipconfig查看本地ip,我的本地ip是192.168.0.107: 2.打开kali虚拟机,编辑ProxyChains配置文件: vi /etc/proxychains.conf 3.在文件末尾的ProxyList中添加物理机本地ip和1080端口作为代理地址: 4.保存并退出即可: esc :wq 回车 5.

qq_34853514的博客 3万+

中移物联ML307C模组OPENCPU笔记2

本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。

weixin_43700831的博客 1883

keras 实现BP神经网络

# -*- coding: utf-8 -*- """ Created on Thu Jul 20 09:59:50 2017@author: Administrator """import pandas as pd inputfile = 'input.xlsx' #excel输入 outputfile = 'output.xls' #excel输出 modelfile = 'modelwei

luoganttcc的博客 1万+

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1027

BP神经网络及其Python和MATLAB实现预测

BP神经网络(Back Propagation Neural Network),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性,BP神经网络在模式识别、函数逼近、优化问题等多个领域有着广泛的应用。本文将详细介绍BP神经网络的基本原理,并通过Python和MATLAB的示例代码展示其在时间序列预测中的应用。

陈辰学长的博客 1485

防火墙断网后Adobe软件还弹窗“THIS APP HAS BEEN DISABLED”?原来是科学上网导致的问题!用这个简单方法一键解决!

很多小伙伴在使用上网工具的时候时,突然遇到Adobe弹出“THIS APP HAS BEEN DISABLED”的烦人提示,这个非正版弹窗真的让人头疼!即使你之前尝试过,有时也不奏效,究其原因,原来是因为你使用了代理网络,这时Adobe的流量并不是走本地,而是走代理,导致防火墙的拦截无效。不用慌!今天我来教大家如何通过上网工具,轻松禁用Adobe验证的联网流量,彻底解决这个问题!

qq_34093397的博客 3万+

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 106

BP 神经网络在动物行为分析中的应用

随着科技的不断发展,对动物行为的深入研究在生物学、生态学、动物保护等多个领域具有重要意义。本文探讨了 BP 神经网络在动物行为分析中的应用,详细阐述了其原理、数据采集与预处理方法、模型构建与训练过程,并通过实际代码示例展示了如何利用 BP 神经网络对动物行为数据进行分类和预测,为动物行为的精准分析提供了一种有效的技术手段。

梵心白莲的博客 1063

从入门到精通:3D视觉与SLAM实战全流程 mastery 教程

本文系统介绍了3D视觉与SLAM技术的应用前景、核心技术和实战路径。3D视觉通过RGB-D相机、激光雷达等传感器获取环境三维信息,SLAM技术实现自主定位与地图构建,二者结合广泛应用于自动驾驶、机器人导航等领域。文章详细拆解了点云处理、视觉里程计、回环检测等关键技术,并提供了ORB-SLAM2算法复现、语义SLAM开发的实战教程,涵盖硬件选型、环境配置到代码实现全流程。最后规划了从入门到专家的学习路径,推荐了相关书籍、开源项目和数据集资源,为读者掌握这一前沿技术提供了完整指南。

m0_71589036的博客 135

写一个bp神经网络做预测的程序

写一个bp神经网络做预测的程序

希望我的博客,能帮上你解决学习中工作中所遇到的问题 754

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

bp神经网络及ROC曲线绘制

bp神经网络及ROC曲线绘制 首先需要导入要用到的包 from tensorflow import keras import pandas as pd import numpy as np 从文本中读取训练数据 data = pd.read_csv('test.txt', sep='\t') data_train = data.iloc[:500] x_train = np.array(data_train[['title1', 'title2', 'title3', 'title4', 'title5

Q.1的博客 4118

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

写一个用bp神经网络预测风电功率的代码

写一个用bp神经网络预测风电功率的代码

希望我的博客,能帮上你解决学习中工作中所遇到的问题 569

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

BP人工神经网络案例

#BP人工神经网络实现 #1.读取数据 #2.导入keras.models Sequential /keras.layers.core Dense,Activation #3.Squential 建立模型 #4.Dense 建立层 #5.Activation激活函数 #6.compile模型编译 #7.fit训练(学习) #8.验证(测试,分类预测) import numpy as np im...

weixin_41789633的博客 1112

Tensorflow.Keras实现mnist手写数字识别并输出预测值**新手向**

1.使用tf.keras.Sequential()搭建一个3层BP神经网络,具体结构如下图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200309214350163.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNz...

qq_42042199的博客 3180

人工神经网络(ANN)BP算法应用(手写体数字识别部分代码)

人工神经网络在热门的人工智能领域有着很多很好的应用。 在网上也有很多优秀的文章阐述人工神经网络的原理和应用,可以参考以下优秀的文章。 https://blog.youkuaiyun.com/leiting_imecas/article/details/60463897 https://blog.youkuaiyun.com/sinat_36171246/article/details/71056454?locati...

heccxx的博客 3267

matlab程序代编程写做代码图像处理BP神经网络机器深度学习python

以上代码展示了如何使用Python和TensorFlow/Keras来构建和训练一个用于图像分类的BP神经网络。你可以根据自己的需求调整图像尺寸、模型架构、训练参数等。希望这个示例对你有帮助!

matlabgoodboy的博客 696
上一篇: jupyter notebook中修改默认文件路径的一种解决方法
下一篇: 基于卷积神经网络CNN的手写数字识别
AddVH
博客等级 码龄7年 13粉丝 5原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值