Тензор потока: Как преобразовать входные данные для тензор потока LSTM? - PullRequest
0 голосов
/ 29 апреля 2018

Итак, я пытаюсь использовать тензор потока для простой классификации, я сомневаюсь,

Если я использую LSTM для классификации текста (например, классификация настроений), то мы выполняем заполнение данных, после чего для подачи в тензорный поток LSTM мы используем word_embedding, поэтому после просмотра word_embedding 2 данные измерений становятся 3-мя измерениями, или матрица ранга 2 становится рангом 3 :

как если бы у меня было два текста:

import tensorflow as tf

text_seq=[[11,21,43,22,11,4,1,3,5,2,8],[4,2,11,4,11,0,0,0,0,0,0]]  #2x11 

#text_seq are index of words from word_to_index dict

a=tf.get_variable('word_embedding',shape=[50,50],dtype=tf.float32,initializer=tf.random_uniform_initializer(-0.01,0.01))

lookup=tf.nn.embedding_lookup(a,text_seq)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(lookup).shape)

Я получу:

(2, 11, 50)

Который я могу легко передать LSTM, потому что LSTM принимает ранг 3

Но моя проблема предполагается, если у меня есть числовые данные с плавающей точкой вместо текстовых данных, и я хочу использовать RNN для классификации,

Итак, предположим, мои данные:

import numpy as np

float_data=[[11.1,21.5,43.6,22.1,11.44],[33.5,12.7,7.4,73.1,89.1],[33.5,12.7,7.4,73.1,89.1],[33.5,12.7,7.4,73.1,89.1],[33.5,12.7,7.4,73.1,89.1],[33.5,12.7,7.4,73.1,89.1]]


labels=[1,2,3,4,5,6]
#2x5

batch_size=2

input_data_batch=[[11.1,21.5,43.6,22.1,11.44],[33.5,12.7,7.4,73.1,89.1]]


 #now should I reshape my data to make it rank 3 like this 


reshape_one=np.reshape(input_data_batch,[-1,batch_size,5])
print(reshape_one)


# or like this ?



reshape_two=np.reshape(input_data_batch,[batch_size,-1,5])

print(reshape_two)

выход:

first one

[[[11.1  21.5  43.6  22.1  11.44]
  [33.5  12.7   7.4  73.1  89.1 ]]]

second one


[[[11.1  21.5  43.6  22.1  11.44]]

 [[33.5  12.7   7.4  73.1  89.1 ]]]

1 Ответ

0 голосов
/ 02 мая 2018

LSTM и другие модели последовательностей могут принимать входные данные, которые являются либо временными (то есть измерениями являются время, партия, канал) или крупными партиями (измерения являются партиями, временем, каналом). Я не знаю, какие флаги вы передаете в какую реализацию tf, поэтому по коду, который вы предоставляете, я не могу определить, хотите ли вы вводы, основанные на партиях или времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...