tensorflow学习笔记
目录
1、tensorflow常量
tensorflw常量语法:
tf.constant(value,dtype=None,shape=None,name='Const',verify_shape=False)
value:必须型,填入常量数值或者list(输入张量的值)
dtype:非必须型,默认为None,输出张量元素类型,如int,float等
shape:非必须型,默认为None,输出张量的维度
name:非必须型,默认为Const,张量名称
verify_shap:非必须型,默认为False,检测shape与value中的shape是否一致,如不一致会用最后一个元素将shape补全
代码例子:
import tensorflow as tf
date = tf.constant(10,dtype=tf.float32,name='date')
date1=tf.constant([10,2,3,12],dtype=tf.float32,shape=[1,4])
date2 = tf.constant([10,3,32,4,5],dtype=tf.float32,shape=[2,4])
print(date)
with tf.Session() as sess: #tensorflow需要Session绘画执行,因此需要定义sess
print(sess.run(date))
print(sess.run(date1))
print(sess.run(date2))
结果:
2、tensorflow变量
tensorflow变量语法:
tf.Variable(initial_value=None,trainable=None,validate_shape=True,
caching_device=None,name=None,variable_def=None,dtype=None,
import_scope=None,constraint=None,
synchronization=VariableSynchronization.AUTO,
aggregation=VariableAggregation.NONE,shape=None)
tf.Variable的属性较多,只选几个常用进行解释
initial_value:变量的初始化值
trainable:如果为True,则GradientTapes(梯度带)自动监视此变量的使用。默认为True,除非synchronization被设置为 ON_READF,在这种情况下,默认为False。
validate_shape:如果为False,则允许使用未知形状的值初始化变量。如果为True,则为默认值,必须知道的初始值 initial_value
name:变量的可选名称
dtype:如果设置,则initial_value将转换为给定类型。如果为 None,则将保留数据类型
shape:(可选)此变量的形状。 如果为None,将使用initial_value的形状。 当将此参数设置为tf.TensorShape(None)(表示未指定的形状)时,可以为变量分配不同形状的值。
参考网站:https://tensorflow.google.cn/api_docs/python/tf/Variable
代码例子
date1 = tf.constant(5)
date = tf.Variable(10)
sum1 =tf.add(date1,date)#加法运算,将date1+date
dataCopy = tf.assign(date,sum1)#赋值运算,将sum1赋值给date
print(date)
init = tf.global_variables_initializer()#变量值需要初始化
with tf.Session() as sess:
sess.run(init)
print('date:',sess.run(date))
print('sum:',sess.run(sum1))
sess.run(dataCopy)
print('date:',sess.run(date))
结果:
<tf.Variable 'Variable_22:0' shape=() dtype=int32_ref>
date: 10
sum: 15
date: 15
tf.Variable在运行时必须先初始化:tf.global_variables_initializer()
3、tensotflow占位符
placeholder()函数
tf.placeholder(dtype,shape=None,name=None)
dtye:必须型,数据类型,如tf.float32,tf.int32等数值
shape:张量维度,默认为None
name:张量名称
代码示例:
import tensorflow as tf
data1 = tf.placeholder(tf.float32)#定义变量赋值
data2 = tf.placeholder(tf.float32)
dataAdd = tf.add(data1,data2)
with tf.Session() as sess:
print(sess.run(dataAdd,feed_dict={data1:6,data2:2}))
print(sess.run(dataAdd,feed_dict={data1:[2,3],data2:[3,2]}))
# 括号内 1、dataAdd运算后张量;2、data数据(feed_dict = {1:参数,2:参数})
print('end!')
结果:
8.0
[5. 5.]
end!
为什么要使用tf.placeholder呢?
tensorflow本质是:tf=tensor(数据)+计算图
因此实际运行时,启动session才会真正运行的,而tf.placeholder的作用在于减少了op(计算方式),每次运算都会迭代上一次数据运算。
3、tensotflow四则运算
tensorflow四则运算包括:加、减、乘、除
tensorflow加法运算语法:x+y
tf.add(x,y,name=None)
tensorflow减法运算语法:x-y
tf.subtract(x,y,name=None)
tensorflow乘法运算语法:x*y
tf.multiply(x,y,name=None)
tensorflow除法运算语法:x/y
tf.divide(x,y,name=None)
常数四则运算代码示例
#常数四则运算
import tensorflow as tf
data1 = tf.constant(6)
data2 = tf.constant(2)
dataAdd = tf.add(data1,data2) #tf.add:tensorflow加法运算
dataMull = tf.multiply(data1,data2) #tf.multiply:tensorflow乘法运算
dataSub = tf.subtract(data1,data2) #tf.subtract:tensorflow减法运算
dataDiv = tf.divide(data1,data2) #tf.divide:tensorflow除法运算
with tf.Session() as sess:
print(sess.run(dataAdd))
print(sess.run(dataMull))
print(sess.run(dataSub))
print(sess.run(dataDiv))
print('end!')
结果:
8
12
4
3.0
end!
4、tensorflow矩阵基础
一般矩阵定义语法:
#一维矩阵:1行4列
data1 = tf.constant([1,2,3,4])
#一维矩阵:4行1列
data2 = tf.constant([[1],[2],[3],[4]])
#二维矩阵:2行2列
data3 = tf.constant([[1,2],[3,4]])
矩阵定义方式:tf.constant( [ [ ] , [ ] ] )
矩阵以中括号表示,一个中括号表示一维,中括号内含中括号表示‘行’
4.1矩阵运算
矩阵乘法运算语句:
tf.matmul(a,b,
transpose_a=False,
transpose_b=False,
adjoint_a=False,
adjoint_b=False,
a_is_sparse=False,
b_is_sparse=False,
name=None)
a:类型为 float16,float32,float64,int32,complex64,complex128 和 rank > 1的张量.
b:与 a 具有相同类型和 rank.
transpose_a:如果 True,a 在乘法之前转置.
transpose_b:如果 True,b 在乘法之前转置.
adjoint_a:如果 True,a 在乘法之前共轭和转置.
adjoint_b:如果 True,b 在乘法之前共轭和转置.
a_is_sparse:如果 True,a 被视为稀疏矩阵.
b_is_sparse:如果 True,b 被视为稀疏矩阵.
name:操作名称(可选).
参考资料:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-l5x72feg.html
代码示例:
data1 = tf.constant([[6,6]])
data2 = tf.constant([[2],[2]])
data3 = tf.constant([[3],[3]])
data4 = tf.constant([[1,2],[3,4],[5,6]])
matMul = tf.matmul(data1,data2) #tf.matmul:矩阵乘法
matMul2 = tf.multiply(data1,data2) #tf.multiply:普通乘法
matAdd = tf.add(data2,data3) #tf.add:加法
with tf.Session() as sess:
print(sess.run(matMul))
print(sess.run(matMul2))
print(sess.run(matAdd))
print(sess.run([matMul,matAdd]))
结果:
[[24]]
[[12 12]
[12 12]]
[[5]
[5]]
[array([[24]]), array([[5],
[5]])]
4.2特殊矩阵
1、空矩阵
tf.zeros(shape, dtype=dtypes.float32, name=None)
2、全一矩阵
tf.ones(shape, dtype=dtypes.float32, name=None)
shape:输入张量维度
dtype:张量类型
name:名称
3、填充矩阵
tf.fill(dims, value, name=None)
dims:输入张量维度,如[2,3]等
value:输入填充常数
name:名称
4、类比零矩阵
tf.zeros_like(input,dtype=None,name=None)
input:输入类比矩阵
dtype:张量类型
name:名称
5、等分矩阵
tf.linspace(start, stop, num, name=None)
start:输入起始值
stop:输入终止值
num:输入等分数
name:名称
6、随机数矩阵
tf.random_uniform(shape,minval=0,maxval=None,
dtype=tf.float32,seed=None,name=None)
shape:一维整数张量或 Python 数组.输出张量的形状.
minval:生成的随机值范围的下限;默认为0.
maxval:生成的随机值范围的上限.如果 dtype 是浮点,则默认为1 .
dtype:输出的类型:float16、float32、float64、int32、orint64.
seed:一个 Python 整数.用于为分布创建一个随机种子.查看 tf.set_random_seed 行为.
name:操作的名称(可选).
参考资料:https://blog.csdn.net/weixin_36670529/article/details/93470877
代码示例:
mat0 = tf.zeros([2,3])
mat1 = tf.ones([3,2])
mat2 = tf.fill([2,3],3)
mat3 = tf.zeros_like(mat2)
mat4 = tf.linspace(0.0,2.0,11)
mat5 = tf.random_uniform([2,3],1,2)
with tf.Session() as sess:
print('空矩阵:','\n',sess.run(mat0))
print('全一矩阵:','\n',sess.run(mat1))
print('填充矩阵:','\n',sess.run(mat2))
print('类比零矩阵:','\n',sess.run(mat3))
print('等分矩阵:','\n',sess.run(mat4))
print('随机矩阵:','\n',sess.run(mat5))
结果:
空矩阵:
[[0. 0. 0.]
[0. 0. 0.]]
全一矩阵:
[[1. 1.]
[1. 1.]
[1. 1.]]
填充矩阵:
[[3 3 3]
[3 3 3]]
类比零矩阵:
[[0 0 0]
[0 0 0]]
等分矩阵:
[0. 0.2 0.4 0.6 0.8 1. 1.2
1.4 1.6 1.8000001 2. ]
随机矩阵:
[[1.441177 1.7821869 1.3769927]
[1.6472073 1.882083 1.627292 ]]