tensorflow笔记DAY01【连载】

tensorflow入门

  • 一、基本概念
    • 1、一般流程
    • 2、总结
  • 二、变量使用
    • 1、小例子——循环器
    • 2、总结
  • 三、fetch&feed
    • 1、fetch——同时运行多个op
    • 2、feed——喂入数据的接口
  • 四、应用:线性模型
    • 1、生成样本数据
    • 2、构造一个线性模型
    • 3、构造loss function
    • 4、构造Optimizer
    • 5、定义代价函数,训练目的
    • 6、初始化变量
    • 7、开始训练

一、基本概念

使用graphs 表示计算任务;
会话Session的上下文context中执行图
tensor表示数据
变量Variable维护状态
feed和fetch为任意的操作赋值或获取数据
使用图表示计算任务,图中的节点为OP(操作),一个op获得0个或多个tensor

1、一般流程

import tensorflow as tf 

第一步:定义op

m1=tf.constant([[3,3]]) #创建常量OP
m2=tf.constant([[2],[3]]) 
product=tf.matmul(m1,m2) #矩阵乘法op,将m1,m2传入

说明:m1是(1,2)的shape, m2是(2,1)的shape
第二步定义会话——原始写法

sess=tf.Session()
result=sess.run(product) #调用乘法op,来执行乘法运算
print(result)
sess.close()

流行写法:

with tf.Session() as sess:
	result=sess.run(product)
	print(result)

结果是:

[[15]]

2、总结

定义常量op

tf.constant([[3,3]])

矩阵乘法op

tf.matmul(m1,m2)

二、变量使用

import tensorflow as tf
x=tf.Variable([1,2]) #变量op
a=tf.constant([3,3])

其中x是’Variable:0’ shape=(2,),a是’Const:0’ shape=(2,)

sub=tf.subtract(x,a) #减法op
add=tf.add(x,sub) #加法op

对计算图进行变量初始化,否则会报这个error
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable

init=tf.global_variables_initializer()

启动图,分别执行两个op,不过这里发现太麻烦了,一次只能执行一个op

with tf.Session() as sess:
	sess.run(init)
	print(sess.run(sub)
	print(sess.run(add)

1、小例子——循环器

state=tf.Variable(0,name='counter')
new_value=tf.add(state,1) #作用使得state加1
update=tf.assign(state,new_value)# 把new_value赋值给state,它是一个赋值op
init=tf.global_variables_initializer()

with tf.Session() as sess:
	sess.run(init)
	print(sess.run(state))
	
	for _ in range(5):
		sess.run(update)
		print(sess.run(state))

结果是

0
1
2
3
4
5

2、总结

赋值op,后置位赋值给前置位

tf.assign(state,new_value)

变量op

x=tf.Variable([1,2])

减法op

sub=tf.subtract(x,a)

加法op

add=tf.add(x,sub)

三、fetch&feed

1、fetch——同时运行多个op

定义输入变量

input1=tf.constant(3.0)
input2=tf.constant(2.0)
input3=tf.constant(5.0)

加法op

add=tf.add(input2,input3)

逐项乘法op

mul=tf.multiply(input1,add)

启动图(可以同时执行多个op)

with tf.Session() as sess:
	result=sess.run([mul,add])
	print(result)

2、feed——喂入数据的接口

定义量个输入,不过此处不定义op了,而是定义占位符

input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)

逐项乘法op

output=tf.multiply(input1,input2)

启动图,喂入数据,以字典的形式对占位符赋值

with tf.Session() as sess:
	print(sess.run(output,feed_dict={input1:[7.0],input2:[2.0]}))

结果

[14.]

四、应用:线性模型

import tensorflow as tf
import numpy as np

1、生成样本数据

x_data=np.random.rand(1000)
y_data=x_data*0.1+0.2

这里根据样本点x_data生成真实值y_data

2、构造一个线性模型

b=tf.Variable(0.)
k=tf.Variable(0.)
y=k*x_data+b

3、构造loss function

均方误差

loss=tf.reduce_mean(tf.square(y_data-y))

说明 tf.reduce_mean求均值,tf.square求平方

4、构造Optimizer

optimizer=tf.train.GradientDescentOptimizer(0.2)

5、定义代价函数,训练目的

train=optimizer.minimize(loss)

6、初始化变量

init=tf.global_variables_initializer()

7、开始训练

with tf.Session() as sess:
	sess.run(init) #初始化
	#迭代
	for step in range(201):
		sess.run(train)
		if step%20==0:
			print(step,sess.run([k,b]))
	

说明:从train开始走,然后触发loss,调用y_data和y的op
接着得出结果后,拉起optimizer的op最后把结果赋值给train

你可能感兴趣的:(tensorflow笔记)