tensorflow

本文详细介绍了TensorFlow的基础概念,包括张量的属性、padding的原理,以及tf.get_variable()与tf.Variable()的区别。此外,还讨论了tf.nn、tf.layers和tf.contrib模块的功能,CPU与GPU的使用,以及交叉熵函数和相关操作,如softmax_cross_entropy_with_logits和sigmoid_cross_entropy_with_logits。同时,讲解了tf.nn.in_top_k的作用和tf.shape与tensor.get_shape的用途,并探讨了name_scope和variable_scope在变量管理中的应用。
摘要由CSDN通过智能技术生成

1. tensor是tensorflow基础的一个概念——张量。

Tensorflow用到了数据流图,数据流图包括数据(Data)、流(Flow)、图(Graph)。Tensorflow里的数据用到的都是tensor,所以谷歌起名为tensorflow。这里写图片描述

Tensor的属性

1.数据类型dtype d是data的首字母,type是类型的意思。tensor里每一个元素的数据类型是一样的。类似于Numpy中ndarray.dtype,tensorflow里的数据类型可以有很多种,比方说tf.float32就是32位的浮点数,tf.int8就是8位的整型,tf.unit8就是8位的无符号整型,tf.string为字符串,tf.bool等等。
2.形状Shape 类似于Numpy中ndarray.shape,比方说一个2行3列的二维矩阵,他的形状就是2行3列。
3.其他属性
device是tensor在哪个设备上被计算出来的,graph是tensor所属的图,name是tensor的名字,op是operation的缩写是产生这个tensor的操作运算,对应图上的结点,这些结点接收一些tensor作为输入并输出一些tensor。还有等等属性,可以查阅官网。
tensor和Numpy有很多共同的性质,tensorflow的作者应该参考了numpy(个人臆测)

####几种Tensor
1.Constant(常量) 是值不能改变的一种tensor,定义在tf.constant这个类里。
这里写图片描述

constant中有几个属性:
value就是constant的数值,我们可以给他赋值,比方说0维的scalar,1维的Vector,2维的matrix或者是3维的张量。
dtype、shape、name刚都有写过。
verify_shape是布尔值,用于验证值的形状。
除了value外都不一定要指定,可以有默认的值但是必须要有一个value。

2.Variable(变量) 是值可以改变的一种tensor,定义在tf.Variable这个类中。构造函数如下图
这里写图片描述

3.Placeholder(占位符) 先占住一个固定的位置,之后在往里面添加值的一种Tensor。定义在tf.placeholder中。这里只有三个属性如下图。并没有value,因为赋值后就不是占位符了。只有dtype,shape,name三个属性。赋值的机制用到了python中字典,即feed_dict。
这里写图片描述

x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.Session() as sess:
    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict={
   x: rand_array}))

比如说官网的例子定义了x占位符,数值类型是tf.float32,形状是1024*1024的二维矩阵。在用会话正式运行图的时候用feed_dict,首先给一个键后加真实的值。

4.SparseTensor(稀疏张量) 是一种稀疏的Tensor,类似线代中稀疏矩阵。定义时只需要定义非0的数,其他的数会自动填充。
这里写图片描述

2. padding

The TensorFlow Convolution example gives an overview about the difference between SAME and VALID :

  • For the SAME padding, the output height and width are computed as:

    • out_height = ceil(float(in_height) / float(strides[1]))
    • out_width = ceil(float(in_width) / float(strides[2]))
  • For the VALID padding, the output height and width are computed as:

    • out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
    • out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))

3. tf.get_variable()和tf.Variable()的区别

tf.Variable(initial_value, trainable=True, collections=None, validate_shape=True, name=None)
##initial_value为变量的初始值
tf.get_variable(name,  shape, initializer) #name就是变量的名称,shape是变量的维度,initializer是变量初始化的方式

initializer初始化的方式有以下几种:

tf.constant_initializer :常量初始化函数

tf.random_normal_initializer:正态分布

tf.truncated_normal_initializer:截取的正态分布

tf.random_uniform_initializer:均匀分布

tf.zeros_initializer:全部是0

tf.ones_initializer:全是1

tf.uniform_unit_scaling_initializer:满足均匀分布,但不影响输出数量级的随机值

tf.contrib.layers.xavier_initializer()

4. tf.nn,tf.layers, tf.contrib模块

我们在使用tensorflow时,会发现tf.nntf.layerstf.contrib模块有很多功能是重复的,尤其是卷积操作,在使用的时候,我们可以根据需要现在不同的模块。但有些时候可以一起混用。 下面是对三个模块的简述:
(1)tf.nn :提供神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation。
(2)tf.layers:主要提供的高层的神经网络,主要和卷积相关的,个人感觉是对tf.nn的进一步封装࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值