Tensorflow之基本操作

Tensor flow是现在最流行的深度学习框架之一,要想使用它,就得按照其要求使用Tensor flow自己的生态环境,那就从最基础的开始学起

#Variable用法
import tensorflow as tf

w  = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w,x)
y
<tf.Tensor 'MatMul:0' shape=(1, 1) dtype=float32>

Variable是将矩阵或是变量转换成为Tensor格式的数据,如上图打印出来的结果。
matmul是做矩阵乘积

#Tensor对象打印输出
#首先要将变量初始化
init_op = tf.global_variables_initializer()
#然后调用Session模块,最后打印的时候还要加eval()函数
with tf.Session() as sess:
    sess.run(init_op)
    print(y.eval())
[[2.]]

其他一些操作

#基本操作,建议tensorflow类据类型多为float32,否则可能会遇到许多错误
#类似于numpy

tf.zeros((3,4), tf.float32)

tf.ones((3,4))

tenser = [[1,2,3],[4,5,6]]
tf.zeros_like(tenser)  #将tenser变成形状为(2,3)元素全为0的数组

tf.ones_like(tenser)#将tenser变成形状为(2,3)元素全为1的数组

#定义常量,一维
tensor = tf.constant([1,2,3,4,5,6]) ==> [1 2 3 4 5 6]
#二维
tensor = tf.constant(-1.0,shape(2,3)) ==> [[-1. -1.],[-1. -1.],[-1. -1.]]

#生成序列
tf.linspace(10,12,3) => [ 10.0  11.0  12.0]

#生成序列
start = 3
limit = 18
delta = 3
tf.range(start, limit, delta)  # [3, 6, 9, 12, 15]
#随机的生成(2,3)的均值为1,方差为4 的分布
norm = tf.random_normal([2,3],mean=1,stddev=4)

#随机打乱
c = tf.constant([[1,2],[2,3],[3,4]])
shuff = tf.random_shuffle(c)

#打印输出也可以是这种方式,官方建议使用with的方式,因为他是一个上下文管理器,最后要close下
ses = tf.Session()
print(ses.run(norm))
print(ses.run(shuff))
[[-2.6340098  1.624991  -0.9962323]
 [-2.7846653  3.2407472  1.3688865]]
[[3 4]
 [1 2]
 [2 3]]
#小例子
state = tf.Variable(0)  #定义初始值
new_value = tf.add(state, tf.constant(1))  #定义常量并进行相加操作
update = tf.assign(state, new_value)     #将后面的值赋值给前面的值

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())  #每次初始化完之后,要再次进行初始化不能再用上次的初始化global,不然会报错哦
    print(sess.run(state))
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))
0
1
2
3

这个例子是一个循环,原本两行搞定的弄得这么麻烦,哈哈哈~,这就是Tensor环境,但也有它的好处,在后面写算法是就会知道它的方便了。

#将numpy转换为tensor格式
import numpy as np
a = np.zeros((3,3))
ta = tf.convert_to_tensor(a)
with tf.Session() as sess:
    print(sess.run(ta))
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
#placeholder 相当于一个占位符,先开辟一个空间等待被赋值,并指定数据类型
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)  #乘法操作
with tf.Session() as sess:
    print(sess.run([output], feed_dict={input1:[2.], input2:[3.]})) #run 并通过feed_dict赋值,字典格式
[array([6.], dtype=float32)]

下面是一个线性回归的例子

import numpy as np
import matplotlib.pyplot as plt

#随机生成1000个点,围绕再y=0.1x+0.3的直线范围内
vectors_set = []
for i in range(1000):
    x1 = np.random.normal(0.0,0.55)
    y1 = x1*0.1 + 0.3 + np.random.normal(0.0, 0.03)
    vectors_set.append([x1, y1])
    
#一些样本
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
plt.scatter(x_data, y_data, c='b')
plt.show()

在这里插入图片描述

#生成1维的W矩阵,取值是[-1,1]之间的随机数
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='W')
#生成1维的b矩阵,初始值为0
b = tf.Variable(tf.zeros([1]), name='b')
#计算出预估值
y = W*x_data + b

#以预估值y和实际值y_data之间的均方误差作为损失值
loss = tf.reduce_mean(tf.square(y - y_data), name='loss')  #tf.square是做平方运算,reduce_mean取均值
#采用梯度下降法来优化参数
optimzer = tf.train.GradientDescentOptimizer(0.5)  #内置的梯度下降求解,传入学习率
#训练过程就是最小化这个误差
train = optimzer.minimize(loss, name='train')  #求解并更新初始值的功能

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

#初始化的w和b是多少
print('W=',sess.run(W),'b=',sess.run(b),'loss=',sess.run(loss))
for step in range(20):
    sess.run(train)
    #输出训练好的W和b
    print('W=',sess.run(W),'b=',sess.run(b),'loss=',sess.run(loss))
W= [0.046175] b= [0.] loss= 0.09313088
W= [0.06895316] b= [0.3022865] loss= 0.0012029369
W= [0.07778016] b= [0.30172718] loss= 0.0010688803
W= [0.08409107] b= [0.3015104] loss= 0.0010005258
W= [0.08859857] b= [0.30135545] loss= 0.0009656554
W= [0.09181802] b= [0.30124477] loss= 0.0009478664
W= [0.09411748] b= [0.3011657] loss= 0.00093879167
W= [0.09575986] b= [0.30110922] loss= 0.00093416224
W= [0.09693291] b= [0.3010689] loss= 0.0009318005
W= [0.09777075] b= [0.30104008] loss= 0.00093059574
W= [0.09836917] b= [0.30101952] loss= 0.0009299812
W= [0.09879659] b= [0.30100483] loss= 0.0009296677
W= [0.09910187] b= [0.30099434] loss= 0.0009295077
W= [0.09931992] b= [0.30098683] loss= 0.00092942605
W= [0.09947566] b= [0.3009815] loss= 0.0009293844
W= [0.09958689] b= [0.30097765] loss= 0.00092936325
W= [0.09966633] b= [0.30097494] loss= 0.0009293524
W= [0.09972308] b= [0.30097297] loss= 0.00092934683
W= [0.09976361] b= [0.3009716] loss= 0.000929344
W= [0.09979255] b= [0.30097058] loss= 0.0009293426
W= [0.09981323] b= [0.30096987] loss= 0.00092934177
plt.scatter(x_data, y_data, c='r')
plt.plot(x_data, sess.run(W)*x_data+sess.run(b))
plt.show()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值