前言

神经网络通常用于分类任务,也可以用于回归任务。使用一个含有隐层的神经网络可以很轻松地拟合出非线性曲线。下面是几个示例,包含matlab的和python的,都很简单。

实例1

首先,生成正弦曲线,并引入随机噪声。随后,在matlab中使用feedforwardnet函数创建BP神经网络,训练网络,并查看最后的拟合结果。

%%
clc;
clear all;
close all;%% 生成正弦曲线
x = linspace(-2*pi, 2*pi, 100);
y = sin(x);
% 对目标值加入噪声
n = 0.1 * rand(1, length(x));
y = y + n;% figure();
% plot(x, y, 'b-');%% 数据归一化,创建测试数据集
[x_, ps] = mapminmax(x);
data_input = x_;
data_target = y;% figure();
% plot(data_input, data_target, 'b-');data_test = linspace(-5, 5, 50);
data_true = sin(data_test);
data_t = mapminmax('apply', data_test, ps);% figure();
% plot(data_t, data_true, 'b-');%% 创建神经网络(也可打开nntool,在matlab中使用gui创建神经网络)
hidden_layer_size = 10;
net = feedforwardnet(hidden_layer_size);
[net, tr] = train(net, data_input, data_target);%% 拟合结果
data_y = sim(net, data_t);
% data_y = net(data_t);
figure();
e = 0.5 * (data_true - data_y) .^ 2;
plot(e);
xlabel('x axis');
ylabel('y axis');
legend('error');figure();
hold on;
plot(data_test, data_y, '*');
plot(x, y, 'b');
xlabel('x axis');
ylabel('y axis');
legend('prediction', 'real value');

运行结果截图:
x轴是测试数据的x坐标,y轴是x坐标对应预测值和曲线真实值的误差。

曲线和拟合结果:

实例2

这里还是用matlab进行的实验。拟合的目标是一个圆,将圆拆成上下两条曲线,分别进行拟合。

%%
clc;
clear all;
close all;%% 生成圆的上半边和下半边
center_x = 0;
center_y = 0;
radius = 4;
x1 = [];
x2 = [];
y1 = [];
y2 = [];
for theta = 0:0.1:pix_ = center_x + radius * cos(theta);x1 = [x1 x_];y_ = center_y + radius * sin(theta);y1 = [y1 y_];
endfor theta = pi:0.1:2*pix_ = center_x + radius * cos(theta);x2 = [x2 x_];y_ = center_y + radius * sin(theta);y2 = [y2 y_];
end% 绘制曲线
figure();
hold on;
plot(x1, y1);
plot(x2, y2);
xlabel('x');
ylabel('y');
xlim([-(radius+2), (radius+2)]);
ylim([-(radius+2), (radius+2)]);%% 创建神经网络
hidden_layer_size = 8;
net1 = feedforwardnet(hidden_layer_size);
net2 = feedforwardnet(hidden_layer_size);
[net1, tr] = train(net1, x1, y1);
[net2, tr] = train(net2, x2, y2);%% 测试结果
test_x = linspace(-5, 5, 20);
p1 = sim(net1, test_x);
p2 = sim(net2, test_x);
% figure();
% hold on;
plot(test_x, p1, '*');
plot(test_x, p2, '*');
xlim([-(radius+2), (radius+2)]);
ylim([-(radius+2), (radius+2)]);

结果截图:
从结果来看,训练好的网络只在圆所在范围内预测有效,出了范围就失效了。

实例3

例子很简单,使用tensorflow构建了一个单隐层神经网络,并进行拟合。
首先导入模块。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

创建数据,并引入噪声。

x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

绘制图片看看。

plt.plot(x_data, y_data)

创建TensorFlow的占位符,用于后面导入数据。

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

创建一个全连接层(隐藏层),激活函数为relu。

w1 = tf.Variable(tf.random_normal([1, 10]))
b1 = tf.Variable(tf.zeros([1, 10]) + 0.1)
ip1 = tf.matmul(xs, w1) + b1
out1 = tf.nn.relu(ip1)

输出层,不接激活函数。

w2 = tf.Variable(tf.random_normal([10,1]))
b2 = tf.Variable(tf.zeros([1, 1]) + 0.1)
ip2 = tf.matmul(out1, w2) + b2
out2 = ip2

loss为均方误差,使用SGD训练网络。

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-out2), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

初始化参数,创建会话。

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

开始训练。

for i in range(1000):_, loss_value = sess.run([train_step, loss], feed_dict={xs:x_data, ys:y_data})if i%50==0:print(loss_value)
0.914197
0.0143666
0.00786084
0.00659379
0.00575486
0.00504135
0.00450164
0.00415548
0.00389943
0.00368641
0.00353138
0.00337983
0.00325611
0.00315293
0.0030722
0.00300812
0.0029489
0.00290472
0.00286406
0.00282905

预测结果看看。

pred = sess.run(out2, feed_dict={xs:x_data})

可以看出拟合出了大致的曲线,但是受到噪声干扰不是很标准。

plt.plot(x_data, pred)

使用神经网络拟合曲线(MATLAB/Python)相关推荐

  1. CNN卷积神经网络案例程序源代码合集matlab/Python等

    CNN卷积神经网络案例程序源代码合集matlab/Python等 1.深入理解CNN(包括CNN的过程显示和前向后向推倒,以及CNN的应用举例.) 2.kerasttensorflowCNN(CNN_ ...

  2. python神经网络编程 豆瓣,python神经网络图像分类

    1.如何利用python实现神经网络 官方不支持,建议等支持吧. dll有自己版本对应的,必须使用专门为python3.4编译的dll(cv2.pyd),你拿python2.7的肯定用不了. 如果非要 ...

  3. 卷积神经网络代码 Matlab,卷积神经网络matlab程序

    cnn卷积神经网络用什么语言来写pascial . 200+这个是hintonmatlab代码的C++改写版.convnetjs-Star,SAE,首选的肯定是LIBSVM这个库;RBM#47.Dee ...

  4. matlab python比较_MATLAB与Python的比较

    知乎视频​www.zhihu.com 我正巧两个语言都比较常用(我是从2010年开始使用MATLAB的, 从2013年开始使用Python.),从我的专栏里面就可以看出来:MATLAB Python ...

  5. MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统

    <基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...

  6. BP神经网络及matlab实现

    本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例  本文以Fisher的Iris数据集 ...

  7. matlab ,python,c++关于格式化输出数字的表达

    我们想要格式化输出1,2,3,...为001,002,003 ...     那么在matlab,python,c++该如何表达呢? matlab: >> filedir=sprintf( ...

  8. win7+vs2015/13+caffe+matlab+python(CPU only)配置

    首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例. 安装必备软件 vs 2015 /vs2013 matlab 2016a(64bit) 推荐使用Anaconda 2.7 或 ...

  9. python深度神经网络算法_02.深度神经网络算法之Python基础与数据分析

    资源内容: 02.深度神经网络算法之Python基础与数据分析|____2016最新python基础篇视频教程22课|____Python学习手册(第4版).pdf|____Python程序入门与进阶 ...

  10. matlab模糊解耦,模糊神经网络解耦MATLAB源程序

    模糊神经网络解耦MATLAB源程序,有详细的注释和剖析,运行结果等. 模糊神经网络解耦MATLAB程序 例用隶属函数型神经网与模糊控制融合的解耦程序 具有耦合的两个相邻子系统的差分方程为 matlab ...

最新文章

  1. learn avalon2
  2. HDU 5531 Rebuild
  3. KDE和GNOME的区别※切换
  4. Teams新功能更新【六月底】Microsoft Teams: Music on Hold
  5. 华为漫画 | 什么是DSP?
  6. 模拟服务器和客户端交互的python脚本
  7. ffplay分析 (音视频同步:主时钟为音频)
  8. Java 实现计时器
  9. java最小泛型demo
  10. 【Python实例第9讲】物种分布模型
  11. 信用评分卡 (part 4 of 7)
  12. 敏捷无敌之Gitlab CI实战
  13. 快速分割多个视频,生成每个视频的m3u8
  14. 190502 Expressing Belief
  15. 网络空间安全大赛简介
  16. 动态渲染element组件el-table表头项+自定义el-table列表项
  17. android锁死横竖屏,Android 锁定横竖屏
  18. 使用NasNet模型与keras做深度学习训练时报错
  19. python正则表达式试题_正则表达式练习题
  20. 塔勒布四部曲之《黑天鹅》

热门文章

  1. Java动态代理类使用
  2. JavaScript单线程 setTimeout定时器
  3. JVM Class详解之一
  4. BoW模型用于图像检索的一般化流程
  5. 在Ubuntu中安装HBase
  6. Hadoop 新 MapReduce 框架 Yarn 详解
  7. 程序员面试题精选100题(08)-求1+2+...+n[C/C++/C#]
  8. Coursera课程Python for everyone:chapter5
  9. Matlab变量及其命名规则
  10. [react-native]-ReactNative为iOS打包ipa文件