欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tensorflow学习笔记 + 程序 (一)tf基础

程序员文章站 2022-07-08 09:41:44
...

1 会话

1.1 基础例程

import tensorflow as tf 

# 创建一个常量矩阵
m1 = tf.constant([[3,3]])
# 创建一个常量矩阵
m2 = tf.constant([[2],[3]])

# 创建一个矩阵乘法的op,将m1和m2传入
product = tf.matmul(m1,m2)

# print(product)  #输出# Tensor("MatMul:0", shape=(1, 1), dtype=int32)
# 只是定义了op,并没有放在session(会话)中执行,故而结果为0


# 定义一个会话,启动默认的图
sess = tf.Session() # 使用默认的会话
result = sess.run(product)
# 启动会话(即4,6,9行只是定义,并没有执行,run之后才取生成了3个op)

# 查看结果
print("矩阵乘法结果 = ",result)
# 关闭会话
sess.close()


# 输出结果
'''
矩阵乘法结果 =  [[15]]
'''

1.2 一般定义方法

'''
with tf.Session() as sess:
    result = sess.run(product)
    print("矩阵乘法结果 = ",result)

'''
# 此时不需要关闭会话了,with内语句执行完毕后会话自动关闭

2 变量

2.1 基础例程

import tensorflow as tf 

# 定义变量矩阵
x = tf.Variable([1,2])
# 定义常量矩阵
a = tf.constant([3,3])
# 定义减法运算
sub = tf.subtract(x,a)
# 定义加法运算
add = tf.add(x,sub)

# 初始化全部变量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init) # 变量初始化
    # 这里也可以直接 sess.run(tf.global_variables_initializer())
    print("减法 : ",sess.run(sub))
    print("加法 : ",sess.run(add))


# 输出结果
''' 矩阵加减法对应位置相运算
减法 :  [-2 -1]
加法 :  [-1  1]
'''

2.2 循环变量自增

import tensorflow as tf 

# 创建一个变量,初始化为0
state = tf.Variable(0)
# 创建一个op,使变量自增1
new_value = tf.add(state,1)
# 调用一个赋值的操作(将新的值赋值给state)
update = tf.assign(state,new_value)
# 全部变量初始化
init = tf.global_variables_initializer()
# 定义会话
with tf.Session() as sess:
    sess.run(init)
    # print(sess.run(state)) # 如果有这句话的话就是0 1 2 3 4 5 了...
    for _ in range(5):
        sess.run(update)
        print(sess.run(state))
        # 相当于输出state的值


# 输出结果
'''
1
2
3
4
5
'''

3 Fetch and Feed

3.1 Fetch

# Fetch : 在会话中能执行多个op

import tensorflow as tf

# 定义三个常量
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)

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

with tf.Session() as sess:
    result = sess.run([add,mul]) # 同时执行但从实际输出也可以看出其是有先后的
    print("结果 : ",result)


# 输出结果
'''
结果 :  [7.0, 21.0]
'''

3.2 Feed

# Feed : 先以占位符的形式创建变量,在用时再给变量赋值

import tensorflow as tf

# 创建两个占位符
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
# 定义乘法运算
output = tf.multiply(input1,input2)

with tf.Session() as sess :
    # Feed的数据以字典的形式传入
    print("结果 : ",sess.run(output,feed_dict = {input1:[7.],input2:[2.]}))


# 输出结果
'''
结果 :  [14.]
'''

4 简单线性函数拟合

4.1 基础实例

import tensorflow as tf
import numpy as np 

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

# 创建变量(线性模型)
b = tf.Variable([0.])
k = tf.Variable([0.])
y = k * x_data + b 

# 二次代价函数(差值的平方求平均值)
loss = tf.reduce_mean(tf.square(y_data - y))
# 定义一个梯度下降法来进行的优化器(学习率为0.2)
optimizer = tf.train.GradientDescentOptimizer(0.2)
# 定义最小化代价函数
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)
        if step % 20 == 0:
            print("运行次数 : ",step)
            print("[k,b] = ",sess.run([k,b]))


# 输出结果
'''
运行次数 :  0
[k,b] =  [array([0.05353429], dtype=float32), array([0.10002092], dtype=float32)]
运行次数 :  20
[k,b] =  [array([0.10323039], dtype=float32), array([0.19826433], dtype=float32)]
运行次数 :  40
[k,b] =  [array([0.10185491], dtype=float32), array([0.19900341], dtype=float32)]
运行次数 :  60
[k,b] =  [array([0.10106507], dtype=float32), array([0.19942777], dtype=float32)]
运行次数 :  80
[k,b] =  [array([0.10061155], dtype=float32), array([0.19967143], dtype=float32)]
运行次数 :  100
[k,b] =  [array([0.10035114], dtype=float32), array([0.19981134], dtype=float32)]
运行次数 :  120
[k,b] =  [array([0.10020163], dtype=float32), array([0.19989167], dtype=float32)]
运行次数 :  140
[k,b] =  [array([0.10011578], dtype=float32), array([0.19993779], dtype=float32)]
运行次数 :  160
[k,b] =  [array([0.10006648], dtype=float32), array([0.19996428], dtype=float32)]
运行次数 :  180
[k,b] =  [array([0.10003818], dtype=float32), array([0.1999795], 
dtype=float32)]
运行次数 :  200
[k,b] =  [array([0.10002191], dtype=float32), array([0.19998823], dtype=float32)]
'''

4.2 加点绘图

import tensorflow as tf
import numpy as np 
import matplotlib.pyplot as plt 

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

# 创建变量(线性模型)
b = tf.Variable([0.])
k = tf.Variable([0.])
y = k * x_data + b 

# 二次代价函数(差值的平方求平均值)
loss = tf.reduce_mean(tf.square(y_data - y))
# 定义一个梯度下降法来进行的优化器
optimizer = tf.train.GradientDescentOptimizer(0.2)
# 定义最小化代价函数
train = optimizer.minimize(loss)

# 变量初始化
init = tf.global_variables_initializer()

with tf.Session() as sess: 
    sess.run(init)
    for step in range(400):
        sess.run(train)
        if step % 20 == 0:
            print("运行次数 : ",step)
            print("[k,b] = ",sess.run([k,b]))
    k,b = sess.run([k,b])

# 绘图
plt.figure(num=1,figsize=(6,6))
plt.scatter(x_data,y_data)
plt.plot(x_data,k*x_data + b,'r',label='Predicted data')

plt.legend()
plt.show()

效果:
tensorflow学习笔记 + 程序 (一)tf基础