tensorflow(1) 基础: 神经网络基本框架
1.tensorflow 的计算得到的是计算图graph
- import tensorflow as tf
- a=tf.constant([1.0,2.0])
- b=tf.constant([3.0,4.0])
- c=a+b
- print(c)
- 结果:Tensor("add_5:0", shape=(2,), dtype=float32)
得到计算图(graph),不计算 其中
shape=(2,0)表示一维 ,长度2 dtype是数据类型
若要计算, 需要用到会话session
- x=tf.constant([[1.0,2.0]]) #张量
- w=tf.constant([[3.0],[4.0]])
- y=tf.matmul(x,w)
- print(y) #得到计算图 graph
- with tf.Session()as sess: #利用会话 运行
- print(sess.run(y))
得到 y=11.0
除了tf.conatant, 还有其他: tf.zeros, tf.ones
tf.fill 全定值数组
- print(tf.zeros([3,2]))
- print(tf.ones([3,2]))
- print(tf.fill([3,2],6)) #全定值数组
- print(tf.constant([3,2,1]))
得到未计算的计算graph
Tensor("zeros:0", shape=(3, 2), dtype=float32)
Tensor("ones:0", shape=(3, 2), dtype=float32)
Tensor("Fill:0", shape=(3, 2), dtype=int32)
Tensor("Const_20:0", shape=(3,), dtype=int32)
2.生成随机数 tf.Variable
- w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))# 2行3列
- print(w)
- 得到 <tf.Variable 'Variable_18:0' shape=(2, 3) dtype=float32_ref>
若seed没有则随机数每次不同, 2*3shape
上述tf.random_normal() 可以用tf.truncated_normal()替换,
表示去掉过大偏离点的正态分布
tf.random_uniform() 平均分布
3. 神经网络实现步骤
step1 准备数据集,提取特征,作为输入喂给神经网络(natural network NN)
step2 搭建NN结构, 从输入到输出(先搭建计算图,再用会话执行)(NN前向传播算法,计算输出)
step 3 大量特征数据喂给NN,迭代优化NN参数(NN反向传播算法,将输出反向传给神经网络,调节参数优化参数训练模型)
step4 使用训练好的模型预测和分类
其中上述123 是训练过程, 第4步是使用过程(应用)
eg: 前向传播的example
生产一批零件 体积x1 重量 x2 作为输入,通过NN后输出一个参数
- x=tf.constant([[0.7,0.5]]) #定义输入和参数
- w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
- w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
- a=tf.matmul(x,w1)
- y=tf.matmul(a,w2)
- with tf.Session() as sess: #会话计算结果
- init_op=tf.global_variables_initializer() #初始化所有变量的函数,初始化为一个节点
- sess.run(init_op)
- print(sess.run(y))
- 得到 [[3.0904665]]
- #tf.placeholder喂入数据
x=tf.placeholder(tf.float32,shape=(1,2)) # 实现喂一组数据- w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
- w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
- a=tf.matmul(x,w1)
- y=tf.matmul(a,w2)
- with tf.Session() as sess: #用会话计算结果
- init_op=tf.global_variables_initializer()
- sess.run(init_op)
- print(sess.run(y,feed_dict={x:[[0.7,0.5]]})) #喂一组数据
若要为喂入多组数据:
- x=tf.placeholder(tf.float32,shape=(None,2)) #实现喂多组数据 不知喂几组,设为None
- w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
- w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
- a=tf.matmul(x,w1)
- y=tf.matmul(a,w2)
- with tf.Session() as sess: #用会话计算结果
- init_op=tf.global_variables_initializer()
- sess.run(init_op)
- print(sess.run(y,feed_dict={x:[[0.7,0.5],[0.3,0.4],[0.4,0.5]]}))
得到:
[[3.0904665]
[1.7270732]
[2.2305048]]
4.反向传播:训练模型参数w1 w2 ,在所有参数上用梯度下降,使得NN模型在训练数据上的损失函数最小,损失函数loss 预测值y 与已知答案 y_ 的差距
loss可以用均方误差, 均方误差MSE MSE(y_,y)=sum(y-y_)^2/n
loss=tf.reduce_mean(tf.square(y_-y))
反向传播的训练方法,以减小loss为优化目标,可以选择以下三个方法,都需要学习率
(决定每次参数更新的幅度), 一般选一个小一点的值0.001
- train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
- train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)
- train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)
- #神经网络基本框架 记住!!!
- batch_size=8 #一次喂给神经网络多少数据
- seed=23455
- rng=np.random.RandomState(seed) #基于seed产生随机数
- X=rng.rand(32,2) #32组数据(每组两个数据,体积,重量)
- #从x这32行的矩阵中取出一行小于 则y赋值为1,大于1则赋值为0
- Y=[[int(x0+x1<1)] for (x0,x1) in X]
- print('X:\n',X)
- print('Y:\n',Y)
- #定义神经网络的输入 参数 输出 定义前向传播过程
- x=tf.placeholder(tf.float32,shape=(None,2))
- y_=tf.placeholder(tf.float32,shape=(None,1)) # 合格或者不合格的特征
- w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
- w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
- a=tf.matmul(x,w1)
- y=tf.matmul(a,w2)
- #定义损失函数 后向传播方法
- loss=tf.reduce_mean(tf.square(y_-y))
- train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
- #train_step=tf.train.MomentumOptimizer(0.001,0.9).minimize(loss) #其他方法
- #train_step=tf.train.AdamOptimizer(0.001).minimize(loss)
- #生成会话 训练
- with tf.Session() as sess: #用会话计算结果
- init_op=tf.global_variables_initializer()
- sess.run(init_op)
- print('w1:\n', sess.run(w1)) #输出目前(未经训练的)参数取值
- print('w2:\n', sess.run(w2))
- #训练模型
- steps=3000 #训练3000次
- for i in range(steps):
- start=(i*batch_size) %32
- end=start+batch_size
- sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) #8组数据
- if i % 500==0: #每500轮打印一次loss值
- total_loss=sess.run(loss,feed_dict={x:X,y_:Y})
- print('After %d training steps,loss on all data is %g' %(i,total_loss))
- print('w1:\n', sess.run(w1)) #输出训练后的参数
- print('w2:\n', sess.run(w2))
X:
[[0.83494319 0.11482951]
[0.66899751 0.46594987]
[0.60181666 0.58838408]
[0.31836656 0.20502072]
[0.87043944 0.02679395]
[0.41539811 0.43938369]
[0.68635684 0.24833404]
[0.97315228 0.68541849]
[0.03081617 0.89479913]
[0.24665715 0.28584862]
[0.31375667 0.47718349]
[0.56689254 0.77079148]
[0.7321604 0.35828963]
[0.15724842 0.94294584]
[0.34933722 0.84634483]
[0.50304053 0.81299619]
[0.23869886 0.9895604 ]
[0.4636501 0.32531094]
[0.36510487 0.97365522]
[0.73350238 0.83833013]
[0.61810158 0.12580353]
[0.59274817 0.18779828]
[0.87150299 0.34679501]
[0.25883219 0.50002932]
[0.75690948 0.83429824]
[0.29316649 0.05646578]
[0.10409134 0.88235166]
[0.06727785 0.57784761]
[0.38492705 0.48384792]
[0.69234428 0.19687348]
[0.42783492 0.73416985]
[0.09696069 0.04883936]]
Y:
[[1], [0], [0], [1], [1], [1], [1], [0], [1], [1], [1], [0], [0], [0], [0], [0], [0], [1], [0], [0], [1], [1], [0], [1], [0], [1], [1], [1], [1], [1], [0], [1]]
w1:
[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
w2:
[[-0.8113182 ]
[ 1.4845988 ]
[ 0.06532937]]
After 0 training steps,loss on all data is 5.13118
After 500 training steps,loss on all data is 0.429111
After 1000 training steps,loss on all data is 0.409789
After 1500 training steps,loss on all data is 0.399923
After 2000 training steps,loss on all data is 0.394146
After 2500 training steps,loss on all data is 0.390597
w1:
[[-0.7000663 0.9136318 0.08953571]
[-2.3402493 -0.14641267 0.58823055]]
w2:
[[-0.06024267]
[ 0.91956186]
[-0.0682071 ]]
tensorflow(1) 基础: 神经网络基本框架的更多相关文章
- TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤
一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...
- NO.1:自学tensorflow之路------神经网络背景知识
引言 从本周,我将开始tensorflow的学习.手头只有一本<tensorflow:实战Google深度学习框架>,这本书对于tensorflow的入门有一定帮助.tensorflow中 ...
- [Tensorflow实战Google深度学习框架]笔记4
本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 ...
- 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)
学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...
- Tensorflow的基础用法
简介 Tensorflow是一个深度学习框架,它使用图(graph)来表示计算任务,使用tensor(张量)表示数据,图中的节点称为OP,在一个会话(Session)的上下文中执行运算,最终产生ten ...
- 使用TensorFlow的卷积神经网络识别自己的单个手写数字,填坑总结
折腾了几天,爬了大大小小若干的坑,特记录如下.代码在最后面. 环境: Python3.6.4 + TensorFlow 1.5.1 + Win7 64位 + I5 3570 CPU 方法: 先用MNI ...
- 第六节,TensorFlow编程基础案例-保存和恢复模型(中)
在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...
- 第五节,TensorFlow编程基础案例-session使用(上)
在第一节中我们已经介绍了一些TensorFlow的编程技巧;第一节,TensorFlow基本用法,但是内容过于偏少,对于TensorFlow的讲解并不多,这一节对之前的内容进行补充,并更加深入了解讲解 ...
- 使用TensorFlow的递归神经网络(LSTM)进行序列预测
本篇文章介绍使用TensorFlow的递归神经网络(LSTM)进行序列预测.作者在网上找到的使用LSTM模型的案例都是解决自然语言处理的问题,而没有一个是来预测连续值的. 所以呢,这里是基于历史观察数 ...
随机推荐
- mongodb 案例 ~ 经典故障案例
一 简介:此文汇总遇到过和搜集过的故障案例 二 场景案例 1 问题描述: mongo集群在无任何业务情况下,mongos所在服务器cpu突然被打满,内核日志报错 mongos被hung住,非常奇怪的问 ...
- Django学习手册 - 自定义分页函数
前端代码: <div class="xianshi"> {% for i in info %} <ul> <li>{{ i }}</li& ...
- 工具方法 .js
1. 获取url问号后面,name的值 /** * *?id=123&a=b * @return object */export function urlParse(){ let url = ...
- ROS 可视化(一): 发布PointCloud2点云数据到Rviz
1. 相关依赖package.xml 需要添加对 pcl_ros 包的依赖 2. CMakeLists.txt find_package(PCL REQUIRED) include_directori ...
- [转] ElasticSearch 常用的查询过滤语句
备忘remark https://www.cnblogs.com/ghj1976/p/5293250.html query 和 filter 的区别请看: http://www.cnblogs.co ...
- P5270 无论怎样神树大人都会删库跑路
题目地址:P5270 无论怎样神树大人都会删库跑路 第一眼看上去是模拟,似乎是 \(O(n)\) 的 水题 信心满满的写完: #include <bits/stdc++.h> using ...
- 使用PHP、MySQL实现修改密码 + 防止通过url强行进入系统
●使用PHP+MySQL实现修改密码 页面: index.php 登陆页面,输入默认密码登陆系统 check.php 核查页面,通过查询数据库检测密码是否正确 ——> 正确,则进入系统 ...
- 新版本微信导致的ios表单bug
解决方法如下: $(document).delegate('input, textarea, select', 'blur', function(){ setTimeout(function(){ $ ...
- Webpack2 中的 NamedModulesPlugin 与 HashedModuleIdsPlugin
要讨论Webpack 2中新增的这两个plugin的功能,还要先从使用Webpack打包的项目的前端资源缓存方案说起. 通常在使用了Webpack的项目中我们会使用CommonsChunkPlugin ...
- python3+selenium入门07-元素等待
在使用selenium进行操作时,有时候在定位元素时会报错.这可能是因为元素还没有来得及加载导致的.可以等过元素等待,等待元素出现.有强制等待,显式等待,隐式等待. 强制等待 就是之前文章中的time ...