Tensorflow 在tf.contrib.rnn.dropoutrapper中使用

Tensorflow 在tf.contrib.rnn.dropoutrapper中使用,tensorflow,Tensorflow,在的api中,我试图设置variation\u recurrent=True,在这种情况下,输入大小是必需的。如上所述,input\u size是包含输入张量的深度的TensorShape对象 深度令人困惑,请问是什么?这只是张量的形状吗?我们可以通过tf.shape()?或者是特殊情况下的图像通道数?但我的输入张量不是图像 我不明白为什么当variation\u returnal=True时需要dtype 谢谢 tf.TensorShape([200,None,300])的输入大小仅为300

在的api中,我试图设置
variation\u recurrent=True
,在这种情况下,输入大小是必需的。如上所述,
input\u size
是包含输入张量的深度的
TensorShape
对象

深度令人困惑,请问是什么?这只是张量的形状吗?我们可以通过
tf.shape()
?或者是特殊情况下的图像通道数?但我的输入张量不是图像

我不明白为什么当
variation\u returnal=True
时需要
dtype


谢谢

tf.TensorShape([200,None,300])的输入大小仅为300

玩这个例子

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"   # see TF issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="1"
import tensorflow as tf
import numpy as np


n_steps = 2
n_inputs = 3
n_neurons = 5
keep_prob = 0.5
learning_rate = 0.001


X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
X_seqs = tf.unstack(tf.transpose(X, perm=[1, 0, 2]))

basic_cell = tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)
basic_cell_drop = tf.contrib.rnn.DropoutWrapper(
    basic_cell,
    input_keep_prob=keep_prob,
    variational_recurrent=True,
    dtype=tf.float32,
    input_size=n_inputs)

output_seqs, states = tf.contrib.rnn.static_rnn(
    basic_cell_drop,
    X_seqs,
    dtype=tf.float32)
outputs = tf.transpose(tf.stack(output_seqs), perm=[1, 0, 2])

init = tf.global_variables_initializer()

X_batch = np.array([
        # t = 0      t = 1 
        [[0, 1, 2], [9, 8, 7]], # instance 1
        [[3, 4, 5], [0, 0, 0]], # instance 2
        [[6, 7, 8], [6, 5, 4]], # instance 3
        [[9, 0, 1], [3, 2, 1]], # instance 4
    ])

with tf.Session() as sess:
    init.run()
    outputs_val = outputs.eval(feed_dict={X: X_batch})


print(outputs_val)

有关更多详细信息,请参见此:

关于您的第一个问题:您对RNN单元格的输入将是某种形状的多维张量
[批次大小,最大时间,…]
。深度指的是“…”尺寸。例如,当您的输入具有形状
(20、35、100)
时,深度为100。在这种情况下,辍学包装中的
input\u size
将为100。