TensorFlow非线性拟合
1、心得: 在使用TensorFlow做非线性拟合的时候注意的一点就是输出层不能使用激活函数,这样就会把整个区间映射到激活函数的值域范围内无法收敛。
# coding:utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 准备需要拟合的数据点
x_data = np.arange(-2*np.pi,2*np.pi,0.1).reshape(-1,1)
y_data = np.sin(x_data).reshape(-1,1)*2 # 建立TensorFlow网络模型
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1]) # 定义权重
weights = {
'w1':tf.Variable(tf.random_normal([1,10],stddev=0.1)),
'w2':tf.Variable(tf.random_normal([10,20],stddev=0.1)),
'out':tf.Variable(tf.random_normal([20,1],stddev=0.1))
} biases = {
'b1':tf.Variable(tf.random_normal([10])),
'b2':tf.Variable(tf.random_normal([20])),
'out':tf.Variable(tf.random_normal([1]))
} # 定义模型
def deep_liner_model(_x,_weights,_biases):
y1 = tf.nn.tanh(tf.add(tf.matmul(_x,_weights['w1']),_biases['b1']))
y2 = tf.nn.tanh(tf.add(tf.matmul(y1,_weights['w2']),_biases['b2']))
# 在计算的时候最后一层别使用激活函数,会进行映射不收敛的。
out = tf.add(tf.matmul(y2,_weights['out']),_biases['out'])
return out y_pred = deep_liner_model(x,weights,biases) # 损失函数:使用欧式距离
# loss = tf.sqrt(tf.reduce_sum(tf.pow(y-y_pred,2)))
loss = tf.reduce_mean(tf.square(y-y_pred))
# 优化器:训练方法
optm = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)
#optm = tf.train.AdadeltaOptimizer(learning_rate=0.01).minimize(loss)
# 准确率:R方评估
R2 = 1 - tf.reduce_sum(tf.pow(y-y_pred,2))/tf.reduce_sum(tf.pow(y-tf.reduce_mean(y_pred),2))
acc_score = tf.reduce_mean(tf.cast(R2,tf.float32)) # 万事俱备只欠训练了。 with tf.Session() as sess:
# 初始化全局变量
sess.run(tf.global_variables_initializer())
# 开始迭代首先使用一万次
for i in range(20000):
sess.run(optm,feed_dict={x:x_data,y:y_data}) if (i+1)%1000==0:
acc = sess.run(acc_score,feed_dict={x:x_data,y:y_data})
avg_loss = sess.run(loss,feed_dict={x:x_data,y:y_data})
print('epoch:%s loss:%s acc:%s'%(i+1,str(avg_loss),str(acc))) y_predict = sess.run(y_pred,feed_dict={x:x_data}) plt.figure('tensorflow',figsize=(12,6))
plt.scatter(x_data, y_data,label='sin(x)的值')
plt.plot(x_data,y_predict,'r',linewidth=1,label='tensorflow拟合值')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
plt.title('tensorflow实现y=sin(x)拟合')
plt.xlabel('x-values',{'size':15})
plt.ylabel('y-values-sin(x)',{'size':15})
plt.legend(loc='upper right')
plt.show()


TensorFlow非线性拟合的更多相关文章
- Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)
Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 运行src/main/java/org/wfw/chart/Main.java 即可查看 ...
- tensorflow神经网络拟合非线性函数与操作指南
本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...
- AI - TensorFlow - 过拟合(Overfitting)
过拟合 过拟合(overfitting,过度学习,过度拟合): 过度准确地拟合了历史数据(精确的区分了所有的训练数据),而对新数据适应性较差,预测时会有很大误差. 过拟合是机器学习中常见的问题,解决方 ...
- 2层感知机(神经网络)实现非线性回归(非线性拟合)【pytorch】
import torch import numpy import random from torch.autograd import Variable import torch.nn.function ...
- MATLAB实例:多元函数拟合(线性与非线性)
MATLAB实例:多元函数拟合(线性与非线性) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请看:随笔分类 - MATLAB作图 之前写过一篇博 ...
- tensorflow之分类学习
写在前面的话 MNIST教程是tensorflow中文社区的第一课,例程即训练一个 手写数字识别 模型:http://www.tensorfly.cn/tfdoc/tutorials/mnist_be ...
- Matlab:拟合(2)
非线性最小二乘拟合: 解法一:用命令lsqcurvefit function f = curvefun(x, tdata) f = x() + x()*exp() * tdata); %其中x() = ...
- matlab最小二乘法数据拟合函数详解
定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...
- scipy插值与拟合
原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot ...
随机推荐
- iOS开发CAAnimation类动画, CATransition动画
#pragma mark - CAAnimation类.实现动画 #pragma mark ** CABasicAnimation 动画 - (IBAction)handleCABasicAnimat ...
- C# HttpWebRequest post提交数据,提交对象
1.客户端方法 //属于客户端 //要向URL Post的方法 public void PostResponse() { HttpWebRequest req = (HttpWebRequest)Ht ...
- java 文件操作知识点
1.每个文件以一个文件路径和文件名称进行表示,在不同的操作系统环境下,文件路径的表示形式是不一样的,例如在Windows操作系统中一般的表示形式为C:\windows\system,而Unix上的表示 ...
- 第53天:鼠标事件、event事件对象
-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事 ...
- js alert()后进行跳转的方法
如果alert()之后再进行跳转本页,按以下方法你将等不到alert(),浏览器就本身刷新本页面了 <script type="text/javascript"> al ...
- 小程序出现 “2 not found” 解决方案
今天新建小程序的时候出现 ,控制台出现“2 not found” 报错. 解决方法: 在控制台输入 openVendor() , 然后会弹出开发工具的文件夹,删除掉下图这两个程序,重启开发工具就可 ...
- 【bzoj1782】[Usaco2010 Feb]slowdown 慢慢游 树链剖分+线段树
题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...
- BZOJ4710 JSOI2011分特产(容斥原理+组合数学)
显然可以容斥去掉每人都不为空的限制.每种物品分配方式独立,各自算一个可重组合乘起来即可. #include<iostream> #include<cstdio> #includ ...
- Andorid API Package ---> android
包名: android Added in API level 1 URL:http:// ...
- [洛谷P4735]最大异或和
题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$, ...