天天看點

應用TensorFlow進階API建構卷積神經網絡(2)--api解釋

tf.estimator.inputs.numpy_input_fn

def numpy_input_fn(x,
                   y=None,
                   batch_size=128,
                   num_epochs=1,
                   shuffle=None,
                   queue_capacity=1000,
                   num_threads=1):
           
  • x是訓練資料,使用numpy_input_fn時就是numpy array的格式。使用Pandas的時候就是dataframe的格式。
  • y是标簽。
  • batch_size,每一次疊代的時候選擇的樣本個數,預設選擇是128個樣本。
  • num_epochs,一個epoch是指把整個資料集訓練一次。
    • epoch=None,steps=100,batch_size=128:

      當epoch=None的時候就是說,訓練的停止條件是達到疊代次數100。(這個時候其實可以算得到整個資料集被訓練了100/(3328/128)=3.84次)

    • epoch=1,steps=100,batch_size=128:

      整個資料集共3328條資料,batch_size為128,是以疊代26次(3328/128)時可以實作整個資料集被訓練了一次,是以實際上疊代26次就停止訓練了。

    • epoch=4,steps=100,batch_size=128:

      和上面類似,隻不過這裡的epoch=4,故資料集總共需要被訓練4次,故疊代次數總共需要4*(3328/128)=104次,但是104>100次,是以100次的時候訓練也停止了。

    • epoch=100,steps=None,batch_size=128:

      這個時候steps不指定意味着停止條件是達到epoch的次數。是以當整個資料集被訓練了100次的時候停止訓練。此時的疊代次數其實是(3328/128)*100=2600次。

train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={"x": train_data},
    y=train_labels,
    batch_size=100,
    num_epochs=None,
    shuffle=True)

eval_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={"x":eval_data},
    y=eval_labels,
    num_epochs=1,
    shuffle=False)
           

https://blog.csdn.net/qq_22238533/article/details/79005221

tf.layers.conv2d

def conv2d(inputs,
           filters,
           kernel_size,
           strides=(1, 1),
           padding='valid',
           data_format='channels_last',
           dilation_rate=(1, 1),
           activation=None,
           use_bias=True,
           kernel_initializer=None,
           bias_initializer=init_ops.zeros_initializer(),
           kernel_regularizer=None,
           bias_regularizer=None,
           activity_regularizer=None,
           kernel_constraint=None,
           bias_constraint=None,
           trainable=True,
           name=None,
           reuse=None):
           
  • inputs:Tensor 輸入
  • filters:整數,表示輸出空間的維數(即卷積過濾器的數量)
  • kernel_size:一個整數,或者包含了兩個整數的元組/隊列,表示卷積窗的高和寬。如果是一個整數,則寬高相等。
  • strides:一個整數,或者包含了兩個整數的元組/隊列,表示卷積的縱向和橫向的步長。如果是一個整數,則橫縱步長相等。另外, strides 不等于1 和 dilation_rate 不等于1 這兩種情況不能同時存在。
  • padding:“valid” 或者 “same”(不區分大小寫)。“valid” 表示不夠卷積核大小的塊就丢棄,"same"表示不夠卷積核大小的塊就補0。
  • data_format:channels_last 或者 channels_first,表示輸入次元的排序。
  • dilation_rate:一個整數,或者包含了兩個整數的元組/隊列,表示使用擴張卷積時的擴張率。如果是一個整數,則所有方向的擴張率相等。另外, strides 不等于1 和 dilation_rate 不等于1 這兩種情況不能同時存在。
  • activation:激活函數。如果是None則為線性函數。
  • use_bias:Boolean類型,表示是否使用偏差向量。
  • kernel_initializer:卷積核的初始化。
  • bias_initializer:偏差向量的初始化。如果是None,則使用預設的初始值。
  • kernel_regularizer:卷積核的正則項
  • bias_regularizer:偏差向量的正則項
  • activity_regularizer:輸出的正則函數
  • kernel_constraint:映射函數,當核被Optimizer更新後應用到核上。Optimizer 用來實作對權重矩陣的範數限制或者值限制。映射函數必須将未被影射的變量作為輸入,且一定輸出映射後的變量(有相同的大小)。做異步的分布式訓練時,使用限制可能是不安全的。
  • bias_constraint:映射函數,當偏差向量被Optimizer更新後應用到偏差向量上。
  • trainable:Boolean類型。
  • name:字元串,層的名字。
  • reuse:Boolean類型,表示是否可以重複使用具有相同名字的前一層的權重。

https://blog.csdn.net/HappyRocking/article/details/80243790

tf.layers.max_pooling2d

def max_pooling2d(inputs,
                  pool_size, strides,
                  padding='valid', data_format='channels_last',
                  name=None):
           
  • pool_size:一個整數或者2個整數的元組/清單:(pool_height,pool_width),指定池化視窗的大小。 可以是單個整數,以為所有空間次元指定相同值。
  • strides:一個整數或者2個整數的元組/清單,指定池操作的步幅。 可以是單個整數,以為所有空間次元指定相同值。
  • padding:字元串,“valid”或者”same”
  • data_format:一個字元串,channels_last(預設)或channels_first中的一個,輸入中次元的排序,channels_last對應于具有形狀(batch,height, width, channels)的輸入,而channels_first對應于具有形狀(batch, channels, height,width)的輸入。
  • name:層的名稱。

tf.layers.dropout

def dropout(inputs,
            rate=0.5,
            noise_shape=None,
            seed=None,
            training=False,
            name=None):
           
  • inputs:輸入的張量
  • rate: 丢失率,表示的是drop_prob而不是keep_prob
  • training: True時會加入dropout, false即測試時不會加入dropout
  • noise_shape : 一個1維的int32張量,代表了随機産生“保留/丢棄”标志的shape。
  • seed : 整形變量,随機數種子。
  • name: 名字。

tf.layers.Flatten

x = tf.placeholder(shape=(None, 4, 4), dtype='float32')
y = flatten(x)
# now `y` has shape `(None, 16)`

x = tf.placeholder(shape=(None, 3, None), dtype='float32')
y = flatten(x)
# now `y` has shape `(None, None)`
           

繼續閱讀