1. 程式人生 > 程式設計 >tensorflow 動態獲取 BatchSzie 的大小例項

tensorflow 動態獲取 BatchSzie 的大小例項

我就廢話不多說了,大家還是直接看程式碼吧~

import tensorflow as tf
import sys

with tf.variable_scope('ha'):
  a1 = tf.get_variable('a',shape=[],dtype=tf.int32)
  with tf.variable_scope('haha'):
    a2 = tf.get_variable('a',dtype=tf.int32)
    with tf.variable_scope('hahaha'):
      a3 = tf.get_variable('a',dtype=tf.int32)

with tf.variable_scope('ha',reuse=True):
  # 不會建立新的變數
  a4 = tf.get_variable('a',dtype=tf.int32)
  
sum = a1 + a2 + a3 + a4

fts_s = tf.placeholder(tf.float32,shape=(None,100),name='fts_s')
b = tf.zeros(shape=(tf.shape(fts_s)[0],tf.shape(fts_s)[1]))

concat = tf.concat(axis=1,values=[fts_s,b])

init_op = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init_op)
  for var in tf.global_variables():
    print var.name
  import numpy as np
  ft_sample = np.ones((10,100))
  con_value = sess.run([concat],feed_dict={fts_s: ft_sample})
  print con_value[0].shape

results:

ha/a:0
ha/haha/a:0
ha/haha/hahaha/a:0
(10,200)

小總結:

1: 對於未知的shape,最常用的就是batch-size 通常是 None 代替,那麼在程式碼中需要用到實際資料的batch size的時候應該怎麼做呢?

可以傳一個tensor型別,tf.shape(Name) 返回一個tensor 型別的資料,然後取batchsize 所在的維度即可. 這樣就能根據具體的資料去獲取batch size的大小

2: 對於變數命名,要善於用 variable_scope 來規範化命名,以及 reuse 引數可以控制共享變數

補充知識:tensorflow RNN 使用動態的batch_size

在使用tensorflow實現RNN模型時,需要初始化隱藏狀態 tensorflow 動態獲取 BatchSzie 的大小例項 如下:

lstm_cell_1 = [tf.nn.rnn_cell.DropoutWrapper(tf.nn.rnn_cell.BasicLSTMCell(HIDDEN_SIZE),output_keep_prob=dropout_keep_prob) for _ in range(NUM_LAYERS)]
cell_1 = tf.nn.rnn_cell.MultiRNNCell(lstm_cell_1)
self.init_state_1 = cell_1.zero_state(self.batch_size,tf.float32)

如果我們直接使用超引數batch_size初始化 tensorflow 動態獲取 BatchSzie 的大小例項 在使用模型預測的結果時會很麻煩。我們可以使用動態的batch_size,就是將batch_size作為一個placeholder,在執行時,將batch_size作為輸入輸入就可以實現根據資料量的大小使用不同的batch_size。

程式碼實現如下:

self.batch_size = tf.placeholder(tf.int32,[],name='batch_size')

self.state = cell.zero_state(self.batch_size,tf.float32)

以上這篇tensorflow 動態獲取 BatchSzie 的大小例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。