AI 利用BP算法及Sigmoid函数,研究函数f(x)=2sinx-0.7的逼近问题-实验报告

简介: AI 利用BP算法及Sigmoid函数,研究函数f(x)=2sinx-0.7的逼近问题-实验报告

1、 问题描述及实验要求


20200607214129142.jpg

(1)写出包含单隐层的正向和反向推倒过程

(2)画出网络结构图

(3)完成算法代码(要求体现推倒过程,也可采用tensorflow完成)

(4)画出误差随迭代次数变化曲线、测试数据图

(5)尝试不同激活函数和隐含层神经元数目,研究其对精度的影响并分析

2、 推导过程


image.png

20200607214326375.png

image.png

20200607214339588.png

3、 网络结构图


image.png

4、 算法代码


import numpy as np
import matplotlib.pyplot as plt
import random
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
x = np.linspace(1, np.pi / 2, 10)
y = 2 * np.sin(x) - 0.7
x_test = np.random.random(10) * (np.pi / 2 - 1) + 1
y_test = 2 * np.sin(x_test) - 0.7
plt.scatter(x, y, marker='o')
plt.scatter(x_test, y_test, marker='+')
plt.title('训练集:红点,测试集:加号')
plt.show()
hide = 10  # 隐藏层神经元个数
W1 = np.random.random((hide, 1))  # 权重
B1 = np.random.random((hide, 1))   # 偏置
W2 = np.random.random((1, hide))
B2 = np.random.random((1, 1))
learningrate = 0.005 # 学习率
iteration = 10000  # 迭代次数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))
E = np.zeros((iteration, 1))  # 存放误差
Y = np.zeros((10, 1))  # 存放训练结果
for k in range(iteration):
    temp = 0
    for i in range(10):
        hide_in = np.dot(x[i], W1) - B1
        hide_out = np.zeros((hide, 1))
        for j in range(hide):
            hide_out[j] = sigmoid(hide_in[j])
        y_out = np.dot(W2, hide_out) - B2
        Y[i] = y_out
        e = y_out - y[i]
        dB2 = -1 * learningrate * e
        dW2 = e * learningrate * np.transpose(hide_out)
        dB1 = np.zeros((hide, 1))
        for j in range(hide):
            dB1[j] = np.dot(np.dot(W2[0][j], sigmoid(hide_in[j])), (1 - sigmoid(hide_in[j])) * (-1) * e * learningrate)
        dW1 = np.zeros((hide, 1))
        for j in range(hide):
            dW1[j] = np.dot(np.dot(W2[0][j], sigmoid(hide_in[j])), (1 - sigmoid(hide_in[j])) * x[i] * e * learningrate)
        W1 = W1 - dW1
        B1 = B1 - dB1
        W2 = W2 - dW2
        B2 = B2 - dB2
        temp = temp + abs(e)
    E[k] = temp
plt.scatter(x, y, c='r')
plt.plot(x, Y)
plt.title('训练集:红点,训练结果:蓝线')
plt.show()
plt.scatter(x_test, y_test, c='y', marker='+')
plt.plot(x, Y)
plt.title('测试集:加号,训练结果:蓝线')
plt.show()
xx = np.linspace(0, iteration, iteration)
plt.plot(xx, E)
plt.title('训练误差随迭代次数趋势图')

5、 实验结果


实验结果截图:

20200607214622638.png

图1-散点图观察训练集与测试集

2020060721464171.png

图2-训练集与训练结果

20200607214657730.png

图3-测试集与训练结果

20200607214715521.png

图4-误差分析

6、 算法分析


不同激活函数对实验结果的影响误差不大,但是随着隐含神经元数目、迭代次数的增加,实验结果会越来越准确,越趋近于函数。

相关文章
|
12月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
913 0
|
12月前
|
存储 机器学习/深度学习 编解码
双选择性信道下正交啁啾分复用(OCDM)的低复杂度均衡算法研究——论文阅读
本文提出统一相位正交啁啾分复用(UP-OCDM)方案,利用循环矩阵特性设计两种低复杂度均衡算法:基于带状近似的LDL^H分解和基于BEM的迭代LSQR,将复杂度由$O(N^3)$降至$O(NQ^2)$或$O(iNM\log N)$,在双选择性信道下显著提升高频谱效率与抗多普勒性能。
587 0
双选择性信道下正交啁啾分复用(OCDM)的低复杂度均衡算法研究——论文阅读
|
12月前
|
存储 监控 算法
基于 Go 语言跳表结构的局域网控制桌面软件进程管理算法研究
针对企业局域网控制桌面软件对海量进程实时监控的需求,本文提出基于跳表的高效管理方案。通过多级索引实现O(log n)的查询、插入与删除性能,结合Go语言实现并发安全的跳表结构,显著提升进程状态处理效率,适用于千级进程的毫秒级响应场景。
403 15
|
12月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
635 8
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
318 1
|
SQL 人工智能 数据挖掘
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
Apache Doris 4.0 原生集成 LLM 函数,将大语言模型能力深度融入 SQL 引擎,实现文本处理智能化与数据分析一体化。通过十大函数,支持智能客服、内容分析、金融风控等场景,提升实时决策效率。采用资源池化管理,保障数据一致性,降低传输开销,毫秒级完成 AI 分析。结合缓存复用、并行执行与权限控制,兼顾性能、成本与安全,推动数据库向 AI 原生演进。
1173 0
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
|
12月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
440 0
|
12月前
|
存储 监控 算法
基于 PHP 布隆过滤器的局域网监控管理工具异常行为检测算法研究
布隆过滤器以其高效的空间利用率和毫秒级查询性能,为局域网监控管理工具提供轻量化异常设备检测方案。相比传统数据库,显著降低延迟与资源消耗,适配边缘设备部署需求,提升网络安全实时防护能力。(238字)
386 0
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
498 0

热门文章

最新文章