Tensorflow(01)——基础操作

目录

1. Tensorflow安装教程

2.张量(Tensor)

3.创建Tensor数据

 3.1 tf.constant()

3.2 tf.zero()

3.3 tf.zeros_like()

3.4 tf.ones()

3.5 fill(),设置shape并初试化shape中的值

3.6 normal()

3.7 tf.random.uniform():用于从均匀分布中输出随机值

3.8 tf.random.truncated_normal() :从截断的正态分布输出随机值

3.9 tf.random.shuffle() :随机地将张量沿其第一维度打乱

4. Tensor Property(属性)

4.1 tf.device()指定数据运行设备

4.2 验证是否为tensor类型

4.3 tf.Variable()函数用于创建变量(Variable)

5. 数据类型的转换

5.1 将numpy转为Tensor:a = tf.convert_to_tensor(b)

5.2 将list中元素逐个转换为Tensor对象然后依次放入Dataset中

6.layers.Dense()

6. layers.Conv2D():卷积


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)
"""

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top Secret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值