TensorFlow 1学习笔记1

1. 基础概念:

Tensorflow是一个编程系统,使用图( graphs)来表示计算任务,图(graphs)中的节点称之为op(operation,比如说某一个加法减法运算什么的这种),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。Tensor 看作是一个 n 维的数组或列表。图必须在会话( Session ) 里被启动。

TensorFlow作为一个框架,在其中是有一个默认的图的,这个默认的图在通常使用过程中就已经足够了,不用再去额外定义什么的。

(1)使用图(graphs)来表示计算任务

(2)在被称之为会话( Session)的上下文( context )中执行图

(3)使用tensor表示数据

(4)通过变量(Variable)维护状态

(5)使用feed和fetch可以为任意的操作赋值或者从其中获取数据

Tips:

Tab键可以进行补全

在某个函数处连续按两次shift+tab可以看见具体的函数描述

2. 一些基本写法的学习:

2.1 对基础操作的认知

m1 = tf.constant([[3,3]]) # 是创建一个一行两列的矩阵
m2 = tf.constant([[2],[3]])  # 是创建一个两行一列的矩阵
product = tf.matmul(m1,m2)  # 是定义了一个op,用来将m1和m2相乘

TensorFlow要去执行的话,不是直接就执行下来了,在这里直接print出product的话,出不来具体的结果,只能得到一个tensor类型的变量。要输出的话,得定义一个会话,定义会话之后就会启动默认的图,然后再用run函数去执行

定义会话有两种方式:

第一种:

sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()

最后一步是关闭会话,这个是必须进行的操作第二种:

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

采用这个方式的话,默认会在执行完后关闭会话,所以不用再写一次关闭操作

2.2 对变量的认知

import tensorflow as tf

x = tf.Variable([1,2])
y = tf.constant([3,4])
sbu = tf.subtract(x,y)  # 定义了一个减法操作
add = tf.add(x,sub)  # 定义了一个加法操作(专业叫法应该是加法op)

# 下面的这行不加会报错,因为需要进行变量初始化,否则会显示未定义
# 下面这行是对全局变量的一个初始化,这一操作可以初始化所有的全局变量
# 若有多个全局变量,也只写这一行即可
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)  # 需要对初始化先进行运行,才能完成变量初始化
    print(sess.run(sub))
    print(sess.run(add))

要点主要是,调用变量时,需要对变量进行初始化,且初始化的语句在会话中需要run之后才表示已经执行,不是定义了就可以。

import tensorflow as tf

state = tf.Variable(0,name='counter')  # 创建了一个名为counter的变量state,且给其初始值0
new_value = tf.add(state,1)  # 创建一个加法op,op具体作用是使state的值+1

# 这是一个赋值op,在TensorFlow中是不能直接用=进行赋值的
# TensorFlow的赋值操作需要调用assign()函数
# assign(A,B)表示将B的值赋给A
update = tf.assign(state,new_value)  

inti = tf.global_variables_initializer()  # 因为有变量,所以需要进行初始化定义

with tf.Session() as sess:
    sess.run(init)  # 进行初始化
    print((sess.run(state)))
    
    # 此处用_的原因是,只想循环5次,但是划不来给这个循环变量取名字,所以直接用_代替了
    # python中这种变量被称为丢弃变量,因为不需要关心这个变量
    for _ in range(5):  
        sess.run(update)  # 执行赋值op
        print(sess.run(state))  # 打印变量state

此处注意赋值语句的使用,循环语句的用法

2.3 图的认识

Fetch:会话中可以执行多个op,并得到运行的结果

import tensorflow as tf

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

add = tf.add(input1,input2)
mul = tf.multiply(input3,add)

with tf.Session() as sess:
    # 这里就是Fetch的体现,run的时候写了中括号,然后同时运行了两个op,
    result = sess.run([mul,add])
    print(result)  # 这里运行可以得到[9,3],前者是乘法op结果,后者是加法op结果

Feed:采用placeholder占位,等到需要时再以字典形式给变量传入值。这个在后面会比较常用

import tensorflow as tf

# 这里的placeholder是一个占位符
# 主要作用是,可以先暂时不给这个变量确定的值,等到运行的时候再传入
input1 = tf.placeholder(tf.float32)  
input2 = tf.placeholder(tf.float32)  
output = tf.multiply(input1,input2)

with tf.Session() as sess:
    # 这里就是在运行时再传入值的写法
    # 在传入过程中采用Feed的写法,用字典的形式给input1和input2赋值7.0和2.0,然后传入并运行
    print(sess.run(output,feed_dict={input1:[7.],input:[2.]}))

2.4 简单示例

import tensorflow as tf
import numpy as np

x_data = np.random.rand(100)  # 使用numpy生成100个随机点
y_data = x_data*0.1 + 0.2

# 构造线性模型
b = tf.Variable(0.)  # 这里赋初值用0.是为了表明是个小数
k = tf.Variable(0.)
y = k*x_data + b

# 二次代价函数的公式为:误差求平方再求均值。其中,y_data是真实值,y是预测值,真实值-预测值=误差
loss = tf.reduce_mean(tf.square(y_data-y))  

# 定义一个梯度下降法来进行训练的优化器
# TensorFlow中将优化的方法称为优化器
# 此处定义的优化器的学习率是0.2,采用的方法是梯度下降法
# TensorFlow中这些优化器方法已经被封装好了,直接调用即可
# 在模型训练过程中,优化器采用梯度下降法不断改变b和k的值,朝着使loss的值越来越小的方向发展,从而达到训练的目的
optimizer = tf.train.GradientDescentOptimizer(0.2)

# 定义最小化代价函数
# 训练模型的目的就是为了去最小化loss,loss越小,则表示训练出的模型的预测值越接近真实值
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)  # 迭代201次,每次迭代都run一下train
        if step%20 == 0:
            # 每20次打印一下步数以及k和b的值,看k和b是怎么从0和0去接近0.1和0.2的
            print(step,sess.run([k,b]))  

主要目的是为了用TensorFlow的相关方法去优化创建的线性模型,使创建的线性模型能够去接近真实的样本点分布。即,不断优化b和k的值,使得构造出的线性模型的形状,能够与y_data的样本点尽量接近或重合。

以上内容从“深度学习框架tensorflow学习与应用 炼数成金”的视频讲解中学习得到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值