0

Je suis nouveau à tensorflow (1 jour d'expérience).Quelle devrait être la taille de l'entrée et de l'état caché dans GRUCell de tensorflow (python)?

Je suis en train suivant petit code pour créer un simple RNN à base GRU avec une seule couche et la taille cachée de 100 comme suit:

import pickle 
import numpy as np 
import pandas as pd 
import tensorflow as tf 

# parameters 
batch_size = 50 
hidden_size = 100 

# create network graph 
input_data = tf.placeholder(tf.int32, [batch_size]) 
output_data = tf.placeholder(tf.int32, [batch_size]) 

cell = tf.nn.rnn_cell.GRUCell(hidden_size) 

initial_state = cell.zero_state(batch_size, tf.float32) 

hidden_state = initial_state 

output_of_cell, hidden_state = cell(input_data, hidden_state) 

Mais j'obtiens l'erreur suivante pour la dernière ligne (c.-à appeler à cell())

Linear is expecting 2D arguments: [[50], [50, 100]] 

Qu'est-ce que je fais mal?

Répondre

0

Les entrées de l'opérateur d'appel GRUCell devraient être des tenseurs 2-D de type tf.float32. Ce qui suit devrait fonctionner:

input_data = tf.placeholder(tf.float32, [batch_size, input_size]) 

cell = tf.nn.rnn_cell.GRUCell(hidden_size) 

initial_state = cell.zero_state(batch_size, tf.float32) 

hidden_state = initial_state 

output_of_cell, hidden_state = cell(input_data, hidden_state) 
+0

En fait, en utilisant 'input_data = tf.placeholder (tf.float32, [batch_size, 1])' travaillée. J'ai ensuite dû remodeler mes données d'entrée d'un tableau de longueur '50' à une matrice' 50X1'. – Sangram

+0

Modifié pour prendre en compte 'input_size'. Oui, en général, votre vecteur d'entrée peut être de taille arbitraire. – keveman

+0

Merci! Je pense que vous serez en mesure de m'aider plus loin. Pourriez-vous s'il vous plaît jeter un oeil à: http://stackoverflow.com/questions/38233056/how-can-i-complete-following-gru-based-rnn-written-in-tensorflow – Sangram