tf.nn.embedding_lookup не работает и получает ошибку - PullRequest
0 голосов
/ 10 сентября 2018

Недавно я начал тестировать набор данных обзора фильмов IMDB, пытался использовать свои коды, но, к сожалению, я получил и такую ​​ошибку, как:

TypeError: Value passed to parameter 'indices' has DataType float32 not in list of allowed values: int32, int64

Я скачал свой набор данных с https://www.kaggle.com/utathya/imdb-review-dataset/version/1#.

Мои коды следующие:

import numpy as np
import tensorflow as tf
from os import listdir
from os.path import isfile, join
import csv
import matplotlib.pyplot as plt
import re
tf.reset_default_graph()





wordsList = open('glove.6B.50d.txt', "r", encoding="utf-8").read().splitlines()
print('Loaded the word list!')

NewwordsList = [word.split()[0] for word in wordsList]
NewwordsVector = [vector.split()[1:] for vector in wordsList]
NewwordsVector = np.asarray(NewwordsVector)

#print(len(NewwordsList))
#print(NewwordsVector.shape)

f = open("imdb_master.csv", "r", encoding="utf8", errors="replace")
csvfiles = csv.reader(f)
numWords = []
positiveFiles = []
negativeFiles = []
for file in csvfiles:
    if file[3] in "pos":
        numWords.append(len(file[2].split()))
        positiveFiles.append(file[2])

    if file[3] in "neg":
        numWords.append(len(file[2].split()))
        negativeFiles.append(file[2])

numFiles = len(numWords)


strip_special_chars = re.compile("[^A-Za-z0-9 ]+")

def cleanSentences(string):
    string = string.lower().replace("<br />", " ")
    return re.sub(strip_special_chars, "", string.lower())

maxSeqLength = 250


totalFiles = np.zeros((numFiles,maxSeqLength), dtype="int32")
fileCounter = 0
for pf in positiveFiles[0:4]:
    indexCounter = 0
    cleanedLine = cleanSentences(pf)
    split = cleanedLine.split()
    for word in split:
        try:
            totalFiles[fileCounter][indexCounter] = NewwordsList.index(word)
        except ValueError:
            totalFiles[fileCounter][indexCounter] = 399999 
        indexCounter = indexCounter + 1
        if indexCounter >= maxSeqLength:
            break
    fileCounter = fileCounter + 1 

for nf in negativeFiles[0:4]:
    indexCounter = 0
    cleanedLine = cleanSentences(nf)
    split = cleanedLine.split()
    for word in split:
        try:
            totalFiles[fileCounter][indexCounter] = NewwordsList.index(word)
        except ValueError:
            totalFiles[fileCounter][indexCounter] = 399999 
        indexCounter = indexCounter + 1
        if indexCounter >= maxSeqLength:
            break
    fileCounter = fileCounter + 1 

#Here we define our model for Tensorflow

batchSize = 24
lstmUnits = 64
numClasses = 2
iterations = 100000
maxDimensionLength = 300

#Placeholders for both input to network and labels
input_data = tf.placeholder(tf.float32,[batchSize, maxSeqLength])
labels = tf.placeholder(tf.float32,[batchSize,numClasses])

data = tf.Variable(tf.zeros([batchSize, maxSeqLength, maxDimensionLength]),dtype=tf.float32)
data = tf.nn.embedding_lookup(NewwordsVector,input_data)

Я пытаюсь понять модель RNN, поэтому я пытаюсь построить эту модель, используя загруженные наборы данных. Я следую довольно много указаний на сайте, но не полезно.

Мои коды работают следующим образом:

1) Я загружаю метрики word2vec из перчатки (https://nlp.stanford.edu/projects/glove/). - файл, который я использовал, - это Wikipedia 2014 + Gigaword 5 (токены 6B, вокабл 400K, uncased, векторы 50d, 100d, 200d и 300d, 822) MB скачать): glove.6B.zip.

2) Затем я разбил его на список слов, а также список векторов.

3) Затем я загружаю наборы данных для IMDB и составляю список положительных и отрицательных классов для целей анализа настроений.

4) Позже я заменяю все скобки и ненужные символы.

5) Затем я нахожу индекс для каждого предложения на положительном и отрицательном и строю вектор для каждого из них.

6) Моя переменная "totalFiles" содержит список векторов как для положительного, так и для отрицательного просмотра предложений из набора данных IMDB.

7) После получения моего вектора моя «ПРОБЛЕМА» началась здесь, я пытаюсь использовать tf.nn.embedding_lookup (vector_argument, input_argument), чтобы отобразить мой индекс в списке векторов (очевидно, мой вектор содержит индекс каждого слова в предложениях, основанных на векторах Glove) ....... tf.nn.embedding_lookup помогает сопоставить индекс с векторами в Glove.

Здесь мои проблемы начинаются со строки 93. С 1-92 все правильно, кроме 93. Когда я использовал tf.nn.embedding_lookup (), это дало мне ошибку. Кто-нибудь может указать, что не так с моими кодами? Пожалуйста и заранее спасибо

...