如果把神经网络比作电脑,那么层结构就好比硬件,而网络参数就好比软件;那么由一系列层结构和其内部的函数,构成了函数簇。所谓函数簇,就是一些列的函数,复杂的网络拥有复杂的函数簇,其能表达的信息也相应更多。在1989年,就有人证明过拥有至少一层隐藏层的神经网络可以逼近任何函数,所以,我们也可以将神经网络看成是一个函数逼近器。

现用基于Tensorflow编写一个拟合COS函数的网络,实际上它可以逼近任何函数,不过需要细心的调参和一些适当的训练技巧,本文只是那COS函数举个例子。同时使用mpl库的animation模块绘制逼近过程的动画。具体说明可看代码和注释:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation#超参数
lr = 0.01
step = 5000x_data = np.linspace(-1,1,300)[:, np.newaxis] #shape = (300,1)
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.3*np.exp(x_data - 0.5) + np.cos(10*x_data) + noisexs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])w1 = tf.Variable(tf.random_normal([1, 30]))
b1 = tf.Variable(tf.zeros([1, 30]) + 0.1)
z1 = tf.matmul(xs, w1) + b1
out1 = tf.nn.relu(z1)w2 = tf.Variable(tf.random_normal([30,10]))
b2 = tf.Variable(tf.zeros([1, 10]) + 0.1)
z2 = tf.matmul(out1, w2) + b2
out2 = tf.nn.relu(z2)w3 = tf.Variable(tf.random_normal([10,1]))
b3 = tf.Variable(tf.zeros([1, 1]) + 0.1)
z3 = tf.matmul(out2, w3) + b3
out3 = z3#损失函数为MSE,优化算法采用梯度下降法
loss = tf.reduce_mean(tf.reshape(tf.square(ys-out3),[-1]))#tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。
train = tf.train.GradientDescentOptimizer(lr).minimize(loss)init = tf.initialize_all_variables()
#init = tf.global_variables_initializer() 这个语句也可以
sess = tf.Session()
sess.run(init)#记录结果
tt = []for i in range(step):loss_value,_ = sess.run([loss, train], feed_dict={xs:x_data, ys:y_data})if i%50==0:print('loss: ',loss_value)tt.append(sess.run(out3,{xs:x_data}))#可视化训练过程
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
line, = ax.plot([], [], lw=2)
def update(n):xx = np.linspace(-1,1,300)yy = tt[n]line.set_data(xx,yy)return lineax.scatter(x_data, y_data, c="r",s=1)
pred = sess.run(out3, feed_dict={xs:x_data})
plt.plot(x_data, pred)
anima = animation.FuncAnimation(fig,update,frames=int(step/50),interval=300)
#anima.save('dynamic_fitting.gif')
plt.show()

效果如下所示

[曲线拟合]使用Tensorflow拟合COS函数相关推荐

  1. 使用TensorFlow拟合三元函数

    定义三元函数w(x,y,z)=exp(x)+y^2+sqrt(z),输入100组数据作为训练集,另取20组数据作为测试集.代码如下: import tensorflow as tf import nu ...

  2. 趋势预测方法(二)其他函数拟合_函数拟合

    其它函数拟合 a基本原理: 给出公式的大致情况,自动去拟合出最优的参数.这里的其它指的是除多项式以外的拟合情况,包括三角函数.对数,以及一些复杂的复合函数. b拟合原理: 总体思路类似于最小二乘法的拟 ...

  3. 利用keras搭建神经网络拟合非线性函数

    神经网络有着一个非常奇妙的结构,它的数学原理虽然相对简单,但是能做的事情却不少,数学家已经证明,具有2层(输入层除外)和非线性激活函数的神经网络,只要在这些层中有足够多的神经元,就可以近似任何函数(严 ...

  4. matlab如何做正交多项式曲线拟合,matlab正交多项式拟合

    在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列; 陈章 位; 胡海清 4.在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列...... 变换后 ...

  5. matlab的多项式拟合,函数求导,画函数曲线

    给一列数据. 拟合出该数据的函数曲线.多项式拟合. 然后画出函数曲线来.以及给出函数形式. 求导. 再画出导数的曲线.以及给出导数函数形式. matlab代码: clc close all clear ...

  6. 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

    1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...

  7. matlab2c使用c++实现matlab函数系列教程-cos函数

    全栈工程师开发手册 (作者:栾鹏) matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 matlab2c调用方法: 1.下载动态链接库 2. ...

  8. python余弦函数_Python cos() 函数

    Python cos() 函数 描述 cos() 返回x的弧度的余弦值. 语法 以下是 cos() 方法的语法:import math math.cos(x) 注意:cos()是不能直接访问的,需要导 ...

  9. tensorflow之constant()函数

    tensorflow之constant()函数 tf.constant()用于声明一个常量 语法格式如下: import tensorflow as tf tf.constant(value,dtyp ...

  10. vc++ cos 函数_cos()函数以及C ++中的示例

    vc++ cos 函数 C ++ cos()函数 (C++ cos() function) cos() function is a library function of cmath header, ...

最新文章

  1. HTML特殊字符过滤器
  2. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]
  3. 065_const关键字
  4. 建模算法(四)——动态规划
  5. Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列
  6. 数据采集工具Telegraf:简介及安装
  7. mysql的一些函数
  8. gz解压命令 linux_Linux日常篇-解压缩命令
  9. win10玩cf不能全屏_游戏莫名卡顿三招搞定!Win10游戏优化教程
  10. HBase之CMS GC调优
  11. shell 批量生成随机文件
  12. ES6学习(三)—字符串的扩展
  13. The Python Challenge 题解
  14. java 守护线程 作用_java中守护线程的一些概念和用法
  15. 剖析 ADO.NET 批处理更新
  16. node.js环境搭建超详细图文教程
  17. vscode中查看二进制文件
  18. 百度飞桨—— 车牌识别学习与修改
  19. 博图注册表删除方法_回收站删除的文件怎么恢复?手把手教你找回
  20. python求均值方差不用numpy_【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印到控制台...

热门文章

  1. DotNetBar布局(一)
  2. 监督计算机控制系统的应用,计算机智能控制系统的应用类型
  3. vue 时间插件限制选择时间
  4. 服务器如何连接到虚拟机PXE,实机通过PXE启动虚拟机,如何设置
  5. KVM虚拟化技术浅析
  6. Git 头像修改 原
  7. selenium下载和安装
  8. mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
  9. 尚硅谷Java Spring注解驱动开发视频教程
  10. 佐罗一键新机数据导出导入文件夹