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非线性拟合的更多相关文章

  1. Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)

    Java 使用 CommonsMath3 的线性和非线性拟合实例,带效果图 例子查看 GitHub Gitee 运行src/main/java/org/wfw/chart/Main.java 即可查看 ...

  2. tensorflow神经网络拟合非线性函数与操作指南

    本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...

  3. AI - TensorFlow - 过拟合(Overfitting)

    过拟合 过拟合(overfitting,过度学习,过度拟合): 过度准确地拟合了历史数据(精确的区分了所有的训练数据),而对新数据适应性较差,预测时会有很大误差. 过拟合是机器学习中常见的问题,解决方 ...

  4. 2层感知机(神经网络)实现非线性回归(非线性拟合)【pytorch】

    import torch import numpy import random from torch.autograd import Variable import torch.nn.function ...

  5. MATLAB实例:多元函数拟合(线性与非线性)

    MATLAB实例:多元函数拟合(线性与非线性) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请看:随笔分类 - MATLAB作图 之前写过一篇博 ...

  6. tensorflow之分类学习

    写在前面的话 MNIST教程是tensorflow中文社区的第一课,例程即训练一个 手写数字识别 模型:http://www.tensorfly.cn/tfdoc/tutorials/mnist_be ...

  7. Matlab:拟合(2)

    非线性最小二乘拟合: 解法一:用命令lsqcurvefit function f = curvefun(x, tdata) f = x() + x()*exp() * tdata); %其中x() = ...

  8. matlab最小二乘法数据拟合函数详解

    定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...

  9. scipy插值与拟合

    原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot ...

随机推荐

  1. 基于gulp的前端自动化开发构建

    就前端的发展而言会越来越朝着后端的标准化靠近,后端的工程化以及模块化都很成熟.基于这样一个思路,开始探索如何优化目前的开发流程.而使用的工具就是gulp. 个人觉得gulp比较webpack更为简单实 ...

  2. iis7 appcmd命令

    iis中提供了appcmd命令 可以通过命令行来配置iis appcmd.exe 默认路径在 c:\windows\system32\inetsrv\下 若要回收应用程序池,请使用以下语法: appc ...

  3. Oracle触发器实现监控某表的CRUD操作

    前提:请用sys用户dba权限登录 1.创建一个表来存储操作日志 create table trig_sql( LT DATE not null primary key, SID NUMBER, SE ...

  4. 在上传文件时候 request.setCharset对文件名有效 对普通文本域无效 需要通过手动转换编码方式编码

    在上传文件时候 request.setCharset对文件名有效 对普通文本域无效 需要通过手动转换编码方式编码

  5. Codeforces 1025D(区间dp)

    容易想到设f[i][j][k]为i~j区间以k为根是否能构成bst.这样是O(n4)的.考虑将状态改为f[i][j][0/1]表示i~j区间以i-1/j+1为根能否构成bst.显然如果是i-1作为根的 ...

  6. 进程池-限制同一时间在CPU上运行的进程数

    if __name__=='__main__' :  为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用. 如果是主动执行,则执行.如果是调用的,则不执行主体. 1. 串行:切记切记: ...

  7. Socket网络编程实例1

    Socket: 对所有上层协议(TCP/IP,UDP等)的底层封装. 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(so ...

  8. NetScaler ‘Counters’ Grab-Bag!

    NetScaler ‘Counters’ Grab-Bag! https://www.citrix.com/blogs/author/andrewre/ https://www.citrix.com/ ...

  9. Android <Android应用开发实战> 资源类型<二>

    1.菜单资源菜单不仅可以在onCreateContextMenu或onCreateOptionsMenu方法中通过代码创建,还可以在res/menu目录中建立相应的菜单资源文件,并在上面两个方法中加载 ...

  10. BZOJ4755: [JSOI2016]扭动的回文串——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4755 JYY有两个长度均为N的字符串A和B. 一个“扭动字符串S(i,j,k)由A中的第i个字符到 ...