基本变量及基本操作
首先我们需要先导入tensorflow并且起个别名tf便于操作
import tensorflow as tf
在python中我们知道随便赋予一个变量值为多少,直接可以写成
#列如变量a初始值为0
a = 0
但是在tensorflow中变量需要调用其内置的Variable()
#声明两个变量矩阵
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
#这里的matmul为乘法
y = tf.matmul(w, x)
在tensorflow必须先显式初始化变量,然后才能执行,否则会报错
而且在tensorflow中必须要Session才可以运行变量及其运算,可以使用sess.run(xx)或者xx.eval()
#这里声明变量初始化
init_op = tf.global_variables_initializer()
#用Session运行tf的相关
with tf.Session() as sess:
sess.run(init_op)
print (y.eval())
#Tensor("Variable_11/read:0", shape=(1, 2), dtype=float32)
#[[ 2.]]
tensorflow创建矩阵常量一般会和numpy的操作很相似所以一些操作和numpy很相似
# 一般tensorflow的类型是float32,在后面可以指定数字的类型。
tf.zeros([3, 4], int32) ==> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
# 'tensor' 是 [[1, 2, 3], [4, 5, 6]]
# zeros_like()是把一个矩阵全变为0的函数
tf.zeros_like(tensor) ==> [[0, 0, 0], [0, 0, 0]]
#创建2行3列的数值全为1的矩阵
tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]
# ones_like()是把矩阵全变为1的函数
tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]
# constant()把列表里面的合并为维度为1的张量
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]
# 可以指定数字和张量维度
tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.]
[-1. -1. -1.]]
# linspace()意思是在10到12内平均分成3份的张量
tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0]
# 'start' is 3
# 'limit' is 18
# 'delta' is 3
# 规定增长幅度的矩阵
tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]
在tensorflow一般随即创建张量会使用random_normal()
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
shape: 输出张量的形状,必选
mean: 正态分布的均值,默认为0
stddev: 正态分布的标准差,默认为1.0
dtype: 输出的类型,默认为tf.float32
seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
name: 操作的名称
norm = tf.random_normal([2, 3], mean=-1, stddev=4)
# 移动张量的第一维
c = tf.constant([[1, 2], [3, 4], [5, 6]])
shuff = tf.random_shuffle(c)
# 用Session运行创建的张量
sess = tf.Session()
print (sess.run(norm))
print (sess.run(shuff))
#[[-0.30886292 3.11809683 3.29861784]
# [-7.09597015 -1.89811802 1.75282788]]
#[[3 4]
# [5 6]
# [1 2]]
一个小操作在python中循环打印出0 1 2 3很简单,但是运用tensorflow会稍微有点复杂
#首先声明一个变量初始值为0
state = tf.Variable(0)
#把变量加1
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())
print(sess.run(state))
#循环4次
for _ in range(3):
sess.run(update)
#打印出来
print(sess.run(state))
在tensorflow可以把Session的对象进行本地储存,可以下次直接调用
#tf.train.Saver
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w, x)
init_op = tf.global_variables_initializer()
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(init_op)
# Do some work with the model.
# Save the variables to disk.
save_path = saver.save(sess, "路径")
print ("Model saved in file: ", save_path)
#Model saved in file: 路径
当然我们也可以运用numpy创建矩阵,然后用tf的内置函数转成tensorflow类型的数据
import numpy as np
#用np创建3x3的矩阵
a = np.zeros((3,3))
#这个方法是把np类型转成tf类型
ta = tf.convert_to_tensor(a)
with tf.Session() as sess:
print(sess.run(ta))
#[[ 0. 0. 0.]
# [ 0. 0. 0.]
# [ 0. 0. 0.]]
最后说一下占位符,这个是tensorflow中常用参数,因为在数据处理的时候如果我们一直加载大量数据会使电脑性能特别差。所以可以先声明数据的形状和类型然后用placeholder代替数据进行计算,最后在运行时往里面传入数据就可以了,传入数据一般用feed_dict={}就可以了。
#占位输入值1
input1 = tf.placeholder(tf.float32)
#占位输入值2
input2 = tf.placeholder(tf.float32)
#占位相乘得出输出值
output = tf.mul(input1, input2)
with tf.Session() as sess:
#用Session运行函数并且向占位符传入值
print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
#[array([ 14.], dtype=float32)]