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


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

相关文章
|
5天前
|
人工智能 知识图谱
成熟的AI要学会自己搞研究!MIT推出科研特工
MIT推出科研特工SciAgents,结合生成式AI、本体表示和多代理建模,实现科学发现的自动化。通过大规模知识图谱和多代理系统,SciAgents能探索新领域、识别复杂模式,加速新材料发现,展现跨学科创新潜力。
27 12
|
3天前
|
机器学习/深度学习 人工智能 算法
基于AI的性能优化技术研究
基于AI的性能优化技术研究
|
24天前
|
人工智能 自然语言处理 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07(下)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07(下)
18 2
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07(下)
|
24天前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05(下)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05(下)
22 1
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05(下)
|
22天前
|
人工智能 安全 决策智能
OpenAI推出实验性“Swarm”框架,引发关于AI驱动自动化的争论
OpenAI推出实验性“Swarm”框架,引发关于AI驱动自动化的争论
|
24天前
|
机器学习/深度学习 人工智能 算法
"拥抱AI规模化浪潮:从数据到算法,解锁未来无限可能,你准备好迎接这场技术革命了吗?"
【10月更文挑战第14天】本文探讨了AI规模化的重要性和挑战,涵盖数据、算法、算力和应用场景等方面。通过使用Python和TensorFlow的示例代码,展示了如何训练并应用一个基本的AI模型进行图像分类,强调了AI规模化在各行业的广泛应用前景。
27 5
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
44 2
|
24天前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(上)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13(上)
34 2
|
24天前
|
传感器 自然语言处理 安全
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07(上)
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07(上)
40 2
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
26 1