怎么在Tensorflow中使用辍学

  介绍

今天就跟大家聊聊有关怎么在Tensorflow中使用辍学,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> tf.nn。辍学

def 辍学(x), keep_prob,, noise_shape=没有,种子=没有,name=None):

其中,x为浮点类型的张量,keep_prob为浮点类型的标量,范围在(0,1)之间,表示x中的元素被保留下来的概率,noise_shape为一维的张量(int32类型),表示标记张量的形状(代表随机生成的形状保持/下降标志),并且noise_shape指定的形状必须对x的形状是可广播的。如果x的形状是(k, l, m, n),并且noise_shape为(k, l, m, n),那么x中的每一个元素是否保留都是独立,但如果x的形状是(k, l, m, n),并且noise_shape为[k, 1, 1, n],则x中的元素沿着第0个维度第3个维度以相互独立的概率保留或者丢弃,而元素沿着第1个维度和第2个维度要么同时保留,要么同时丢弃。

关于Tensorflow中的广播机制,可以参考《Tensorflow和NumPy的广播机制探秘》

最终,会输出一个与x形状相同的张量受潮湿腐烂,如果x中的元素被丢弃,则在仓促中的对应位置元素为0,如果x中的元素被保留,则在仓促中对应位置上的值为怎么在Tensorflow中使用的辍学生”>,这么做是为了使得ret中的元素之和等于x中的元素之和。</p> <p> <强> tf.layers。辍学</强> <br/> </p> <pre类= def 辍学(输入,   ,,率=0.5,   ,,noise_shape=没有   ,,种子=没有   ,才能训练=False,   ,,名字=None):

参数输入为输入的张量,与tf.nn.dropout的参数keep_prob不同,率指定元素被丢弃的概率,如果率=0.1,则输入中10%的元素将被丢弃,noise_shape与tf.nn。辍学的noise_shape一致,培训参数用来指示当前阶段是出于训练阶段还是测试阶段,如果培训为真(即训练阶段),则会进行辍学,否则不进行辍学,直接返回输入。

<>强自定义稀疏张量的辍学

上述的两种方法都是针对密度张量的辍学,但有的时候,输入可能是稀疏张量,仿照tf.nn.dropout和tf.layers。辍学的内部实现原理,自定义稀疏张量的辍学生。

def  sparse_dropout (x), keep_prob,, noise_shape):=,,keep_tensor  keep_prob  +, tf.random_uniform (noise_shape)=,,drop_mask  tf.cast (tf.floor (keep_tensor), dtype=tf.bool)=,,out  tf.sparse_retain (x), drop_mask)   ,return  out  *, (1.0/keep_prob)

其中,参数x和keep_prob与tf.nn。辍学一致,noise_shape x中为非空元素的个数,如果x中有4个非空值,则noise_shape为[4],keep_tensor的元素为[1.0 + keep_prob keep_prob)的均匀分布,通过tf.floor向下取整得到标记张量drop_mask,特遣部队。sparse_retain用于在一个SparseTensor中保留指定的非空值。

案例

def  nn_dropout (x), keep_prob,, noise_shape):=,,out  tf.nn.dropout (x), keep_prob,, noise_shape)   return 了         def  layers_dropout (x,, keep_prob,, noise_shape,,培训=False):=,,out  tf.layers.dropout (keep_prob, x,还以为,noise_shape,培训=)   return 了         def  sparse_dropout (x,, keep_prob,, noise_shape):=,,keep_tensor  keep_prob  +, tf.random_uniform (noise_shape)=,,drop_mask  tf.cast (tf.floor (keep_tensor), dtype=tf.bool)=,,out  tf.sparse_retain (x), drop_mask)   ,return  out  *, (1.0/keep_prob)         if  __name__ ==, & # 39; __main__ # 39;:=,,inputs1  tf.SparseTensor(指数=[(0,0),(0,2),(1,1),[1,2]],,值=(1.0,2.0,3.0,,4.0],,dense_shape=(2, 3))=,,inputs2  tf.sparse_tensor_to_dense (inputs1)=,,nn_d_out  nn_dropout (0.5 inputs2,,,, (2, 3))=,,layers_d_out  layers_dropout (0.5 inputs2,,,,(2, 3),培训=True)=,,sparse_d_out  sparse_dropout (inputs1,, 0.5,, [4])   ,with  tf.Session (), as 税:   sess.run才能(tf.global_variables_initializer ())   (三机一体,才能in2),=, sess.run ([inputs2 inputs1也])   打印(in)才能   打印(in2)才能   ,,(着干活,out2,, out3),=, sess.run ([nn_d_out, layers_d_out,, sparse_d_out])   打印才能(着干活)   打印(out2)才能   打印才能(out3)

tensorflow中,稀疏张量为SparseTensor,稀疏张量的值为SparseTensorValue.3种辍学的输出如下,

SparseTensorValue(指数=数组(((0,0),   ,,(0,2),   ,,(1,1),   ,,[1,2]],,dtype=int64),数组值=((,1,,2,,3,,4),,dtype=float32),数组,dense_shape=((2, 3), dtype=int64))   [[0,1只,又是;2。)   ,[0只,3只;4。]]   ,   [[0只,2只;0。)   ,(0只0只0。]]   [[,0只0只4。)   ,(0只0只0。]]   SparseTensorValue(指数=阵列([],,=(0,2),形状,dtype=int64),,数组值=([],dtype=float32),, dense_shape=数组((2,3),dtype=int64))

怎么在Tensorflow中使用辍学