学习Tensorflow(一)基本概念

创建图和启动图 

import tensorflow as tf

# 创建一个常亮op 1行2列
m1 = tf.constant([[3,3]])  # 注意矩阵的表示方法([])

# 创建一个常亮op 2行1列
m2 = tf.constant([[2], [3]]) # 注意矩阵的表示方法

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

# print(product) err

# 定义一个会话 启动默认图
sess = tf.Session()

# 调用sess的run方法来执行矩阵乘法op
# run(product)触发了图中3个op
result = sess.run(product)
print(result)
sess.close()

运行结果: 

 

 上面的改进:

import tensorflow as tf

# 创建一个常亮op 1行2列
m1 = tf.constant([[3,3]])  # 注意矩阵的表示方法([])

# 创建一个常亮op 2行1列
m2 = tf.constant([[2], [3]]) # 注意矩阵的表示方法

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

# 方法2:不需要关闭了,自动关闭
with tf.Session() as sess:
    # 调用sess的run方法来执行矩阵乘法op
    # run(product)触发了图中3个op
    result = sess.run(product)
    print(result)

变量介绍

import tensorflow as tf

# 定义一个变量,需要初始化
x = tf.Variable([1, 2])
# 定义一个常量
a = tf.constant([3, 3])

# 增加一个减法op
sub = tf.subtract(x, a)

# 增加一个加法op
add = tf.add(x, sub)

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

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

# 创建一个变量初始化为0  name以后有用
state = tf.Variable(0, name='counter')

# 创建一个op作用作用是使state+1
new_value = tf.add(state, 1)

# 赋值op: tf中不能用=赋值
update = tf.assign(state, new_value)

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

# 函数原型:range(start, end, scan):
# 参数含义:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0, 5);
#          end:技术到end结束,但不包括end 。例如:range(0, 5)是[0, 1, 2, 3, 4]没有5
#          scan:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
# for num in range(10,20):  # 迭代 10 到 20 之间的数字

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(state))
    for _ in range(5):
        sess.run(update)
        print(sess.run(state))
运行结果:
[-2 -1]
[-1  1]
0
1
2
3
4
5

Fetch和Feed

import tensorflow as tf

# Fetch 在会话中可以同时运行多个op
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([mul, add])  # Fetch: [mul, add]
    print(result)

# Feed: 先创建占位符,运行的时候再把值传入
# 创建占位符
input1 = tf.placeholder(tf.float32)  # 占位符placeholder
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.]}))

运行结果:
[21.0, 7.0]
[14.]

直线拟合

import tensorflow as tf
import numpy as np

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

# 构造一个线性模型
b = tf.Variable(1.1) # 0. 浮点型
k = tf.Variable(0.5)
y = k*x_data + b

# 优化b,k使y接近y_data
# 二次代价函数
loss = tf.reduce_mean(tf.square(y_data - y)) # 误差的平方求平均值

# 定义一个梯度下降法来进行训练的优化器
optimizer = tf.train.GradientDescentOptimizer(0.2) # 学习率: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:  # 每训练20次打印一次k,b
            print(step,sess.run([k, b]))


运行结果:
0 [0.2603341, 0.65777206]
20 [0.057515964, 0.22323903]
40 [0.07396434, 0.21424147]
60 [0.08404451, 0.20872763]
80 [0.09022198, 0.20534857]
100 [0.09400769, 0.20327778]
120 [0.09632771, 0.20200874]
140 [0.0977495, 0.20123102]
160 [0.09862083, 0.2007544]
180 [0.0991548, 0.20046233]
200 [0.099482045, 0.20028332]

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值