使用神经网络拟合曲线(MATLAB/Python)
前言
神经网络通常用于分类任务,也可以用于回归任务。使用一个含有隐层的神经网络可以很轻松地拟合出非线性曲线。下面是几个示例,包含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)相关推荐
- CNN卷积神经网络案例程序源代码合集matlab/Python等
CNN卷积神经网络案例程序源代码合集matlab/Python等 1.深入理解CNN(包括CNN的过程显示和前向后向推倒,以及CNN的应用举例.) 2.kerasttensorflowCNN(CNN_ ...
- python神经网络编程 豆瓣,python神经网络图像分类
1.如何利用python实现神经网络 官方不支持,建议等支持吧. dll有自己版本对应的,必须使用专门为python3.4编译的dll(cv2.pyd),你拿python2.7的肯定用不了. 如果非要 ...
- 卷积神经网络代码 Matlab,卷积神经网络matlab程序
cnn卷积神经网络用什么语言来写pascial . 200+这个是hintonmatlab代码的C++改写版.convnetjs-Star,SAE,首选的肯定是LIBSVM这个库;RBM#47.Dee ...
- matlab python比较_MATLAB与Python的比较
知乎视频www.zhihu.com 我正巧两个语言都比较常用(我是从2010年开始使用MATLAB的, 从2013年开始使用Python.),从我的专栏里面就可以看出来:MATLAB Python ...
- MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统
<基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...
- BP神经网络及matlab实现
本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 . 第0节.引例 本文以Fisher的Iris数据集 ...
- matlab ,python,c++关于格式化输出数字的表达
我们想要格式化输出1,2,3,...为001,002,003 ... 那么在matlab,python,c++该如何表达呢? matlab: >> filedir=sprintf( ...
- win7+vs2015/13+caffe+matlab+python(CPU only)配置
首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例. 安装必备软件 vs 2015 /vs2013 matlab 2016a(64bit) 推荐使用Anaconda 2.7 或 ...
- python深度神经网络算法_02.深度神经网络算法之Python基础与数据分析
资源内容: 02.深度神经网络算法之Python基础与数据分析|____2016最新python基础篇视频教程22课|____Python学习手册(第4版).pdf|____Python程序入门与进阶 ...
- matlab模糊解耦,模糊神经网络解耦MATLAB源程序
模糊神经网络解耦MATLAB源程序,有详细的注释和剖析,运行结果等. 模糊神经网络解耦MATLAB程序 例用隶属函数型神经网与模糊控制融合的解耦程序 具有耦合的两个相邻子系统的差分方程为 matlab ...
最新文章
- learn avalon2
- HDU 5531 Rebuild
- KDE和GNOME的区别※切换
- Teams新功能更新【六月底】Microsoft Teams: Music on Hold
- 华为漫画 | 什么是DSP?
- 模拟服务器和客户端交互的python脚本
- ffplay分析 (音视频同步:主时钟为音频)
- Java 实现计时器
- java最小泛型demo
- 【Python实例第9讲】物种分布模型
- 信用评分卡 (part 4 of 7)
- 敏捷无敌之Gitlab CI实战
- 快速分割多个视频,生成每个视频的m3u8
- 190502 Expressing Belief
- 网络空间安全大赛简介
- 动态渲染element组件el-table表头项+自定义el-table列表项
- android锁死横竖屏,Android 锁定横竖屏
- 使用NasNet模型与keras做深度学习训练时报错
- python正则表达式试题_正则表达式练习题
- 塔勒布四部曲之《黑天鹅》
热门文章
- Java动态代理类使用
- JavaScript单线程 setTimeout定时器
- JVM Class详解之一
- BoW模型用于图像检索的一般化流程
- 在Ubuntu中安装HBase
- Hadoop 新 MapReduce 框架 Yarn 详解
- 程序员面试题精选100题(08)-求1+2+...+n[C/C++/C#]
- Coursera课程Python for everyone:chapter5
- Matlab变量及其命名规则
- [react-native]-ReactNative为iOS打包ipa文件