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、 算法分析


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

相关文章
|
4月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
447 0
|
3月前
|
存储 人工智能 安全
拔俗AI临床大数据科研分析平台:让医学研究更智能、更高效
阿里云原生AI临床大数据科研平台,打通异构医疗数据壁垒,实现智能治理、可视化分析与多中心安全协作,助力医院科研提速增效,推动精准医疗发展。
658 1
|
3月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
396 5
|
4月前
|
SQL 人工智能 数据挖掘
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
Apache Doris 4.0 原生集成 LLM 函数,将大语言模型能力深度融入 SQL 引擎,实现文本处理智能化与数据分析一体化。通过十大函数,支持智能客服、内容分析、金融风控等场景,提升实时决策效率。采用资源池化管理,保障数据一致性,降低传输开销,毫秒级完成 AI 分析。结合缓存复用、并行执行与权限控制,兼顾性能、成本与安全,推动数据库向 AI 原生演进。
407 0
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
|
4月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
121 8
|
4月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
4月前
|
机器学习/深度学习 传感器 算法
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
261 7
|
人工智能 大数据 安全
拔俗AI临床大数据科研分析平台:用智能技术加速医学研究新突破
AI临床大数据科研平台基于云原生架构,融合医疗NLP、联邦学习与智能分析技术,破解非结构化数据处理难、多源数据融合难、统计周期长等痛点,实现数据治理、智能分析与安全协作全链路升级,赋能医学科研高效、安全、智能化发展。
183 0
|
5月前
|
人工智能 自然语言处理 数据挖掘
Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
在即将发布的 Apache Doris 4.0 版本中,我们正式引入了一系列 LLM 函数,将前沿的 AI 能力与日常的数据分析相结合,无论是精准提取文本信息,还是对评论进行情感分类,亦或生成精炼的文本摘要,皆可在数据库内部无缝完成。
438 0
Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍

热门文章

最新文章