目录
3.5 fill(),设置shape并初试化shape中的值
3.7 tf.random.uniform():用于从均匀分布中输出随机值
3.8 tf.random.truncated_normal() :从截断的正态分布输出随机值
3.9 tf.random.shuffle() :随机地将张量沿其第一维度打乱
4.3 tf.Variable()函数用于创建变量(Variable)
5.1 将numpy转为Tensor:a = tf.convert_to_tensor(b)
5.2 将list中元素逐个转换为Tensor对象然后依次放入Dataset中
1. Tensorflow安装教程
下载安装视频讲解:
链接:https://pan.baidu.com/s/107V18x6wqaXWerwj8hxMKA?pwd=2022
提取码:2022
2.张量(Tensor)
3 # 这个 0 阶张量就是标量,shape=[]
[1., 2., 3.] # 这个 1 阶张量就是向量,shape=[3]
[[1., 2., 3.], [4., 5., 6.]] # 这个 2 阶张量就是二维数组,shape=[2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # 这个 3 阶张量就是三维数组,shape=[2, 1, 3]
3.创建Tensor数据
3.1 tf.constant()
3.2 tf.zero()
import tensorflow as tf
tensor1 = tf.zeros([])
tensor2 = tf.zeros([1]) #参数表示shape()
tensor3 = tf.zeros([2,2])
print(tensor1)
print(tensor2)
print(tensor3)
"""
tf.Tensor(0.0, shape=(), dtype=float32)
tf.Tensor([0.], shape=(1,), dtype=float32)
tf.Tensor(
[[0. 0.]
[0. 0.]], shape=(2, 2), dtype=float32)
"""
3.3 tf.zeros_like()
3.4 tf.ones()
3.5 fill(),设置shape并初试化shape中的值
import tensorflow as tf
a = tf.fill([2,2],0)
b = tf.fill([2,2,2],9)
print(a)
print(b)
"""
tf.Tensor(
[[0 0]
[0 0]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[[9 9]
[9 9]]
[[9 9]
[9 9]]], shape=(2, 2, 2), dtype=int32)
"""
3.6 normal()
3.7 tf.random.uniform():用于从均匀分布中输出随机值
def random_uniform(shape,
minval=0,
maxval=None,
dtype=dtypes.float32,
seed=None,
name=None):
shape: 张量形状
minval: 随机值范围下限,默认0
maxval: 随机值范围上限,如果 dtype 是浮点,则默认为1 。
dtype: 输出的类型:float16、float32、float64、int32、orint64
seed: 一个 Python 整数.用于为分布创建一个随机种子
name: 操作的名称(可选)
3.8 tf.random.truncated_normal() :从截断的正态分布输出随机值
tf.random.truncated_normal(
shape, mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None
)
3.9 tf.random.shuffle() :随机地将张量沿其第一维度打乱
random_shuffle(
value,
seed=None,
name=None
)
4. Tensor Property(属性)
4.1 tf.device()指定数据运行设备
GPU需要具体指定设备序号tf.device(“/gpu:设备序号“);CPU不区分设备号tf.device(“/cpu:0“)。
import tensorflow as tf
v1 = tf.constant([1.0, 2.0, 3.0], shape=[3], name='v1')
v2 = tf.constant([1.0, 2.0, 3.0], shape=[3], name='v2')
sumV12 = v1 + v2
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print sess.run(sumV12)
4.2 验证是否为tensor类型
(1) isinstance(a,tf.Tensor)
(2) tf.is_tensor(b)
4.3 tf.Variable()函数用于创建变量(Variable)
tf.Variable()函数用于创建变量(Variable),变量是一个特殊的张量(),其可以是任意的形状和类型的张量。
语法格式如下:
tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None))
注意: 在启动图时(进行操作之前),所有的变量必须被明确定义。变量常用来储存和更新参数,在计算图过程中其值会一直保存至程序运行结束,这点正是区别于一般的张量。一般的Tensorflow张量在运行过程中仅仅是从计算图中流过,并不会被保存下来。涉及到变量的相关操作必须通过session会话控制。
特别注意:在tensorflow的世界里变量的定义和初始化是被分开的。
初始化变量:之前是用tf.initialize_all_variables()函数,但是在2017年3月2号之后,该函数不再使用,用 tf.global_variables_initializer() 替代 tf.initialize_all_variables()
tf.global_variables_initializer()用于初始化所有变量;w.initializer用于初始化单个变量。
import tensorflow as tf
w = tf.Variable([6,8,6]) #创建变量w
print(w) #查看变量的shape,而不是值。
with tf.Session() as sess:
sess.run(w.initializer) #初始化变量
print(sess.run(w)) #查看变量的值
#运行结果:
<tf.Variable 'Variable:0' shape=(3,) dtype=int32_ref>
[6 8 6]
也可以使用 tf.get_variable ()函数来定义变量。实质上,tf.Variable()是真正的定义变量,而tf.get_variable()是获取变量,主要设计目的是用于共享变量,但如果获取不到就等同于新定义变量。此外,使用tf.Variable时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错。使用tf.Variable()时,如若检测到重名现象,系统会自动处理,处理方式一般是在重名后面加上"_n"。然而,tf.get_variable()发现重名冲突直接报错。
import tensorflow as tf
V1 = tf.Variable([1,2,3],name="V1")
V2 = tf.Variable([2,3,4],name="V1")
V3 = tf.Variable([3,4,5],name="V1_1")
print("V1:",V1.name)
print("V2:",V2.name)
print("V3:",V3.name)
#运行结果:
V1: V1:0
V2: V1_1:0
V3: V1_1_1:0
5. 数据类型的转换
5.1 将numpy转为Tensor:a = tf.convert_to_tensor(b)
(1)tf.convert_to_tensor(b)
(2)tf.cast(a,dtype=tf.int32)
例如:
import numpy as np
import tensorflow as tf
numpy1 = np.ones([2,3])
numpy2 = np.zeros([2,3])
list = [1,2]
tensor1 = tf.convert_to_tensor(np.ones([2,3])) #将numpy数据转化为Tensor数据
tensor2 = tf.convert_to_tensor(list) #list转Tensor
print("numpy的数据类型:",np.ones([2,3]))
print("numpy转Tensor:",tensor1)
print("list转Tensor:",tensor2)
5.2 将list中元素逐个转换为Tensor对象然后依次放入Dataset中
import tensorflow as tf
# 传入list,将list中元素逐个转换为Tensor对象然后依次放入Dataset中
x1 = [0, 1, 2, 3, 4]
x2 = [[0, 1], [2, 3], [4, 5]]
ds1 = tf.data.Dataset.from_tensor_slices(x1)
ds2 = tf.data.Dataset.from_tensor_slices(x2)
for step, m in enumerate(ds1):
print(m) # tf.Tensor(0, shape=(), dtype=int32)...
for step, m in enumerate(ds2):
print(m) # tf.Tensor([0 1], shape=(2,), dtype=int32)...
# 传入tuple。这种形式适合整合特征和标签。
xx = [[0, 1], [2, 3], [4, 5]]
yy = [11, 22, 33]
ds11 = tf.data.Dataset.from_tensor_slices((xx, yy))
for step, (ds11_xx, ds11_yy) in enumerate(ds11):
print(ds11_xx) # tf.Tensor([0 1], shape=(2,), dtype=int32)...
print(ds11_yy) # tf.Tensor(11, shape=(), dtype=int32)...
6.layers.Dense()
好文推荐
tf.layers.dense( input, units=k )会在内部自动生成一个权矩阵kernel和偏移项bias,各变量具体尺寸如下:对于尺寸为[m, n]的二维张量input, tf.layers.dense()会生成:尺寸为[n, k]的权矩阵kernel,和尺寸为[m, k]的偏移项bias。内部的计算过程为y = input * kernel + bias,输出值y的维度为[m, k]。
import tensorflow as tf
# 1. 调用tf.layers.dense计算
input = tf.reshape(tf.constant([[1., 2.], [2., 3.]]), shape=[4, 1])
b1 = tf.layers.dense(input,
units=2,
kernel_initializer=tf.constant_initializer(value=2), # shape: [1,2]
bias_initializer=tf.constant_initializer(value=1)) # shape: [4,2]
# 2. 采用矩阵相乘的方式计算
kernel = tf.reshape(tf.constant([2., 2.]), shape=[1, 2])
bias = tf.reshape(tf.constant([1., 1., 1., 1., 1., 1., 1., 1.]), shape=[4, 2])
b2 = tf.add(tf.matmul(input, kernel), bias)
with tf.Session()as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b1))
print(sess.run(b2))
6. layers.Conv2D():卷积
tf.keras.layers.Conv2D()
tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid', data_format=None,
dilation_rate=(1, 1), activation=None, use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros',
kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None,
kernel_constraint=None, bias_constraint=None, **kwargs
)
其中:
1、filter 为卷积核的个数
2、kernel_size 为卷积核尺寸,正方形用一个整数表示即可;长方形需指明 高h, 核宽w,可以用列表或元组表示,如(h,w),[h,w].
3、strides 为滑动步长,默认横纵向滑动步长均为1,即(1,1),也可以设置其他步长(纵向步长h,横向步长w).
4、padding 为补零策略,padding = "SAME"需全零填充,padding = “VALID” 不需要区分大小写。注意此处不区分大小写。
5、data_format 为输入的数据格式,此处有两个取值,data_format = “channels_first” 或 data_format = "channels_last.输入的数据格式。默认取“channels_last”,即默认输入数据的格式中,通道数为最后一个。当data_format = "channels_first"的时候,输入和输出的shape格式为
(batch_size, channels, height, width)即(图片数量,通道数,长,宽)。
import tensorflow as tf
from keras.applications.densenet import layers
x = tf.random.normal((4,32,32,3))
net = layers.Conv2D(16,kernel_size=3)
print(net(x).shape)
"""
(4, 30, 30, 16)
"""