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) 基础: 神经网络基本框架的更多相关文章

  1. TensorFlow+实战Google深度学习框架学习笔记(5)----神经网络训练步骤

    一.TensorFlow实战Google深度学习框架学习 1.步骤: 1.定义神经网络的结构和前向传播的输出结果. 2.定义损失函数以及选择反向传播优化的算法. 3.生成会话(session)并且在训 ...

  2. NO.1:自学tensorflow之路------神经网络背景知识

    引言 从本周,我将开始tensorflow的学习.手头只有一本<tensorflow:实战Google深度学习框架>,这本书对于tensorflow的入门有一定帮助.tensorflow中 ...

  3. [Tensorflow实战Google深度学习框架]笔记4

    本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 ...

  4. 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

    学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...

  5. Tensorflow的基础用法

    简介 Tensorflow是一个深度学习框架,它使用图(graph)来表示计算任务,使用tensor(张量)表示数据,图中的节点称为OP,在一个会话(Session)的上下文中执行运算,最终产生ten ...

  6. 使用TensorFlow的卷积神经网络识别自己的单个手写数字,填坑总结

    折腾了几天,爬了大大小小若干的坑,特记录如下.代码在最后面. 环境: Python3.6.4 + TensorFlow 1.5.1 + Win7 64位 + I5 3570 CPU 方法: 先用MNI ...

  7. 第六节,TensorFlow编程基础案例-保存和恢复模型(中)

    在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...

  8. 第五节,TensorFlow编程基础案例-session使用(上)

    在第一节中我们已经介绍了一些TensorFlow的编程技巧;第一节,TensorFlow基本用法,但是内容过于偏少,对于TensorFlow的讲解并不多,这一节对之前的内容进行补充,并更加深入了解讲解 ...

  9. 使用TensorFlow的递归神经网络(LSTM)进行序列预测

    本篇文章介绍使用TensorFlow的递归神经网络(LSTM)进行序列预测.作者在网上找到的使用LSTM模型的案例都是解决自然语言处理的问题,而没有一个是来预测连续值的. 所以呢,这里是基于历史观察数 ...

随机推荐

  1. 【Git】在GitHub或OSChina上新建项目后,如何在本地第一次push代码到服务器

    场景1:将本地代码push到远程仓库上的master主分支 #初始化git,执行init命令后,默认新建本地分支master git init #关联远程仓库 git remote add origi ...

  2. K - Video Reviews Gym - 101755K (二分)

    题目链接: K - Video Reviews Gym - 101755K 题目大意: 一家公司想让个人给他们的产品评论,所以依次去找这个人,第i个人会评论当且仅当已经有个人评论或他确实对这个产品感兴 ...

  3. mongodb 系列 ~ mongo的副本集(2)

    一 简介:来试试更改副本集的oplog问题二 背景: oplog的作用类似于mysql的binlog,传递增量操作到从节点 三 oplog介绍   1 oplog在local库:      1 mas ...

  4. 对mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解

    乐观锁 乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了. 实现: 通常实现是 ...

  5. SSIS服务无法登录的解决方案

    现象1:登录SSIS报权限认证失败. 授予对 Integration Services 服务的访问权限 运行 Dcomcnfg.exe. Dcomcnfg.exe 提供用于修改注册表中的某些设置的用户 ...

  6. SpringSecurity实现短信登录功能

    ⒈封装短信验证码类 package cn.coreqi.security.validate; import java.time.LocalDateTime; public class Validate ...

  7. 【转】python模块分析之hashlib加密(二)

    [转]python模块分析之hashlib加密(二) hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用.一.函数分析:1. ...

  8. python hmac解密

    import hmac def get_singa_true(timestamp): sha1 = hmac.new("d1b964811afb40118a12068ff74a12f4&qu ...

  9. python3+selenium框架设计01-Page Object

    页面对象模型Page Object Modal是一种脚本设计模型,将页面元素,业务操作分割,当实际页面发生变化的时候,只需要修改页面元素文件,业务操作不需要修改. 具体实现需要先写一个页面公共类,里面 ...

  10. boost 实现http断点续传

    // testc.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...