溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

tensorflow如何動(dòng)態(tài)獲取BatchSzie大小

發(fā)布時(shí)間:2020-07-01 11:08:19 來源:億速云 閱讀:400 作者:清晨 欄目:開發(fā)技術(shù)

小編給大家分享一下tensorflow如何動(dòng)態(tài)獲取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', shape=[], dtype=tf.int32)
    with tf.variable_scope('hahaha'):
      a3 = tf.get_variable('a', shape=[], dtype=tf.int32)

with tf.variable_scope('ha', reuse=True):
  # 不會(huì)創(chuàng)建新的變量
  a4 = tf.get_variable('a', shape=[], 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)

小總結(jié):

1: 對(duì)于未知的shape, 最常用的就是batch-size 通常是 None 代替, 那么在代碼中需要用到實(shí)際數(shù)據(jù)的batch size的時(shí)候應(yīng)該怎么做呢?

可以傳一個(gè)tensor類型, tf.shape(Name) 返回一個(gè)tensor 類型的數(shù)據(jù), 然后取batchsize 所在的維度即可. 這樣就能根據(jù)具體的數(shù)據(jù)去獲取batch size的大小

2: 對(duì)于變量命名, 要善于用 variable_scope 來規(guī)范化命名, 以及 reuse 參數(shù)可以控制共享變量

補(bǔ)充知識(shí):tensorflow RNN 使用動(dòng)態(tài)的batch_size

在使用tensorflow實(shí)現(xiàn)RNN模型時(shí),需要初始化隱藏狀態(tài) tensorflow如何動(dòng)態(tài)獲取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)

如果我們直接使用超參數(shù)batch_size初始化 tensorflow如何動(dòng)態(tài)獲取BatchSzie大小 在使用模型預(yù)測的結(jié)果時(shí)會(huì)很麻煩。我們可以使用動(dòng)態(tài)的batch_size,就是將batch_size作為一個(gè)placeholder,在運(yùn)行時(shí),將batch_size作為輸入輸入就可以實(shí)現(xiàn)根據(jù)數(shù)據(jù)量的大小使用不同的batch_size。

代碼實(shí)現(xiàn)如下:

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

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

看完了這篇文章,相信你對(duì)tensorflow如何動(dòng)態(tài)獲取BatchSzie大小有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI