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的例子,但没什么解释,新手理解起来比较困难. 所以本文对这个案例 ...
随机推荐
- Type class-Typeclass-泛型基础上的二次抽象---随意多态
对泛型的类型添加约束,从而使泛型类型的变量具有某种通用操作. 再使用这些操作,参与到其它操作中. In computer science, a type class is a type system ...
- python tips:匿名函数lambda
lambda用于创建匿名函数,下面两种函数定义方式等价. f = lambda x: x + 2 def f(x): return x + 2 立刻执行的匿名函数 (lambda x: print(x ...
- 阿里云直播鉴权java代码示例
段时间公司需要做直播服务,所以就研究了一下阿里云的直播,在直播里面,最重要的就是url的鉴权操作(验证推流或者拉流的有效性),在网上找了很多代码,都没有发现java的demo,所以就写篇播客记录一下, ...
- eas启动服务器时非法组件
EAS实例启动报系统中存在非法组件,实例启动失败: 组件检查机制,要求除了 $EAS_HOME eas\server\lib: $EAS_HOME \eas\server\deploy\files ...
- C#第五节课
switch语句 using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sys ...
- 1.1、配置Python虚拟环境
安装虚拟环境 系统:CentOS 7.2 python版本:Python 2.7.5 1.虚拟环境介绍 虚拟环境是Python解释器的一个私有副本,在这个环境中你可以安装私有包,而且不会影响系统中安装 ...
- Linux—Ubuntu14.0.5安装MySQL
1.更新资援列表 sudo apt-get update 2.安装mysql的操作命令(下一步选中“Y”) sudo apt-get install mysql-server 3.输入MySQLroo ...
- flask日期和时间
本文翻译自The Flask Mega-Tutorial Part XII: Dates and Times 这是Flask Mega-Tutorial系列的第十二部分,我将告诉你如何以适配所有用户的 ...
- 【例题 4-4 uva 213】Message Decoding
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 输入的二进制长度最长为7 所以得开个sta[7][2^7]的样子才存的下所有的字符的.. 定义这么一个数组当字典. 然后一个字符一个 ...
- hdu 3555数位dp基础入门题
#include<stdio.h> #define N 20 long long dp[N][3]; void init(){ long long i; dp[0][0]=1; for ...