TensorFlow-正弦函数拟合
MNIST的代码还是有点复杂,一大半内容全在搞数据,看了半天全是一滩烂泥。最关键的是最后输出就是一个accuracy,我根本就不关心你准确率是0.98还是0.99好吗?我就想看到我手写一个5,你程序给我输出一个5,就这么简单。
粗略看了文档和网上找了些资料,感觉上吧,倒是有点像Verilog。描述图结构的时候每句话定义一个tensor,它的值由tensorflow下的某一个函数以之前定义过的tensor作为参数运算得到的结果。
参考了一下别人的代码,自己写了一个比较直观,能马上看到结果的图,功能是拟合正弦函数。
import tensorflow as tf
import math #输入层
xs = tf.placeholder(tf.float32,[None,1],name="xs")
ys = tf.placeholder(tf.float32,[None,1],name="ys") #隐藏层
W1 = tf.Variable(tf.random_normal([1,15]))
b1 = tf.Variable(tf.zeros([1,15])+0.1)
Wx_plus_b1 = tf.matmul(xs,W1) + b1
output1 = tf.nn.relu(Wx_plus_b1) #输出层
W2 = tf.Variable(tf.random_normal([15,1]))
b2 = tf.Variable(tf.zeros([1,1])+0.1)
Wx_plus_b2 = tf.matmul(output1,W2) + b2
output2 = tf.add(Wx_plus_b2,0,name="output")
#损失
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-output2),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
#初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) #训练
def loop_i():
ret=-1*math.pi;
for i in range(200):
yield ret
ret+=math.pi/100
for j in range(1000):
i_range = loop_i();
for i in i_range:
_,loss_value = sess.run([train_step,loss],feed_dict={xs:[[i]],ys:[[math.sin(i)]]}) #进行梯度下降运算,并计算每一步的损失
if(j%50==0):
print(loss_value)
#保存
saver = tf.train.Saver()
save_path = saver.save(sess,"E:/python/model")
图就是一个简单的1->15->1的全连接,比较好理解。不过在模型的保存和导出这里遇到了很大的困扰,场面一度十分尴尬,还好最后搞定了。
保存是这样保存的:
saver = tf.train.Saver()
save_path = saver.save(sess,"E:/python/model")
然后目录下生成四个文件

需要恢复的时候先导入图结构:
saver = tf.train.import_meta_graph('E:/python/model.meta')
graph = tf.get_default_graph()
获取需要发生交互的tensor,比如输入输出点:
xs=graph.get_tensor_by_name('xs:0')
ys=graph.get_tensor_by_name('ys:0')
output=graph.get_tensor_by_name('output:0')
这里的name是在保存之前定义好的,比如这里:

根据目前的了解,想加name貌似必须是xxx=tf.xxxxxx(xxxxxxxx, name="")这种形式,所以上面的代码里被迫写了一句
这种搞笑定义。
接下来恢复之前计算好的数值:
saver.restore(sess, tf.train.latest_checkpoint('E:/python'))
函数里的参数是模型文件所在的目录,而不是文件本身。
测试的代码:
import tensorflow as tf
#导入图结构
saver = tf.train.import_meta_graph('E:/python/model.meta')
graph = tf.get_default_graph()
xs=graph.get_tensor_by_name('xs:0')
ys=graph.get_tensor_by_name('ys:0')
output=graph.get_tensor_by_name('output:0') with tf.Session() as sess:
#恢复变量
saver.restore(sess, tf.train.latest_checkpoint('E:/python'))
#测试
test = sess.run(output, feed_dict={xs: [[1]], ys: [[0]]})
print(test)
输出结果:

前两位正确,还可以接受。
TensorFlow-正弦函数拟合的更多相关文章
- AI - TensorFlow - 过拟合(Overfitting)
过拟合 过拟合(overfitting,过度学习,过度拟合): 过度准确地拟合了历史数据(精确的区分了所有的训练数据),而对新数据适应性较差,预测时会有很大误差. 过拟合是机器学习中常见的问题,解决方 ...
- tensorflow神经网络拟合非线性函数与操作指南
本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...
- TensorFlow非线性拟合
1.心得: 在使用TensorFlow做非线性拟合的时候注意的一点就是输出层不能使用激活函数,这样就会把整个区间映射到激活函数的值域范围内无法收敛. # coding:utf-8 import ten ...
- python 拟合曲线并求参
需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布, 所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线. python的scipy.optimize包里的curve_fit函数来 ...
- PyTorch全连接ReLU网络
PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网 ...
- TensorFlow拟合线性函数
TensorFlow拟合线性函数 简单的TensorFlow图构造 以单个神经元为例 x_data数据为20个随机 [0, 1) 的32位浮点数按照 shape=[20] 组成的张量 y_data为 ...
- TensorFlow从1到2(八)过拟合和欠拟合的优化
<从锅炉工到AI专家(6)>一文中,我们把神经网络模型降维,简单的在二维空间中介绍了过拟合和欠拟合的现象和解决方法.但是因为条件所限,在该文中我们只介绍了理论,并没有实际观察现象和应对. ...
- tensorflow学习之(八)使用dropout解决overfitting(过拟合)问题
#使用dropout解决overfitting(过拟合)问题 #如果有dropout,在feed_dict的参数中一定要加入dropout的值 import tensorflow as tf from ...
- 06 使用Tensorflow拟合x与y之间的关系
看代码: import tensorflow as tf import numpy as np #构造输入数据(我们用神经网络拟合x_data和y_data之间的关系) x_data = np.lin ...
- 蛙蛙推荐: TensorFlow Hello World 之平面拟合
tensorflow 已经发布了 2.0 alpha 版本,所以是时候学一波 tf 了.官方教程有个平面拟合的类似Hello World的例子,但没什么解释,新手理解起来比较困难. 所以本文对这个案例 ...
随机推荐
- (转)基于Metronic的Bootstrap开发框架经验总结(4)--Bootstrap图标的提取和利用
http://www.cnblogs.com/wuhuacong/p/4762924.html 在前面的一篇随笔<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模 ...
- Memcached 之分布式算法原理
memcached并不像mongodb一样可以配置多个节点,并且节点之间可以”自动分配数据“,即相互通信,所以我们在做memcache分布式集群的时候要有一个算法来保证当一台memcache服务器宕机 ...
- C# --MVC实现简单上传下载
首先创建一个默认的控制器Defaultcontroller 然后生成视图View 在视图里面 创建文件选择器 创建上传.下载按钮 代码如下 <body> <div> <f ...
- idea搭建第一个springboot
1.打开idea开发工具,在菜单栏选择File-->New-->Project...-->Spring Initializer说明:社区版的idea是没有Spring Initial ...
- GDI 画笔(9)
使用现有画笔 Windows 提供三种备用画笔(Stock Pen):BLACK_PEN(黑色画笔).WHITE_PEN(白色画笔).NULL_PEN(不绘制任何图形的画笔). 调用 GetStock ...
- nyoj24-素数 距离问题
素数距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...
- 20190218-学习python使用shelve遇到raise error, "db type could not be determined"
照书上敲代码,运行了提示raise error, "db type could not be determined",现场如下: ubuntu-vm:~/code/massageb ...
- Oracle数据库的性能调整
oracle是一个高性能数据库软件.用户可以通过参数的调整,达到性能的优化.性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的. ...
- Easyphp让其他电脑访问
1.将httpd.conf中的Listen 127.0.0.1:80,修改为Listen 80. 2.重启
- 百度之星2014资格赛 1003 - Xor Sum
先上代码: Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)T ...