VGGNet-16のいくつかの関数の解析

2101 ワード

get_の使用shape()[-1].value tensorの最後の次元の長さを取得し、get_shape()[0].value tensorの1次元の長さを取得します.例:
 input = tf.random_normal([224,225,3], dtype=tf.float32,stddev = 1e-1)
>>> input.get_shape()[0].value
224
>>> input.get_shape()[1].value
225
>>> input.get_shape()[2].value
3
>>> input.get_shape()[3].value
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Users\PengFeihu\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 612, in __getitem__
    return self._dims[key]
IndexError: list index out of range
>>> input.get_shape()[-1].value
3
>>> input.get_shape()[-2].value
225
>>> input.get_shape()[-3].value
224
>>> input.get_shape()[-4].value
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Users\PengFeihu\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 612, in __getitem__
    return self._dims[key]
IndexError: list index out of range

Xavier初期化メソッド関数:
tf.contrib.layers.xavier_initializer_conv2d()

tf.Variableは、パラメータを訓練可能(可変)パラメータに変換することができる.
tf.Variable(bias, trainable=True, name='b')

tf.name_scope(name)は、変数に同じ変数名nameを持たせることができます.たとえば、次のようにします.
with tf.name_scope('V1'):
    a1 = tf.Variable(name='a1', shape=[1], initializer=tf.constant_initializer(1))
    a2 = tf.Variable(tf.random_normal(shape=[2,3], mean=0, stddev=1), name='a2')
    

出力:
V1/a1:0
V1/a2:0
tf.nn.relu_layerは次のように使用されます.
tf.nn.relu_layer(input, kernel, biases, name = scope)

前の2つのパラメータがマトリクス乗算され、3番目のパラメータが加算されることを示します.もちろんbiase_addを行い、relu非線形変換アクティブ化を行います.
最大プール関数tf.nn.max_pool(input,ksize=[1,kh,kw,1],stride=[1,dh,dw,1],padding,name)のうち、inputは入力tensor、ksizeはプール化コアサイズkh*kw、strideはプール化ステップ長、paddingはプール化方式、SAMEとVALIDの2種類があり、validは枠を超えてはならない.