Используйте наборы данных для обработки массивов, а не тензоров - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть часть обучающего кода, как показано ниже - я не понимаю, как использовать наборы данных для обработки данных в виде простых числовых массивов, а не тензоров, потому что в приведенном ниже коде я получаю следующую ошибку:

Тензорные объекты не могут быть повторяемыми, если активное выполнение не включено. Чтобы перебрать этот тензор, используйте tf.map_fn

В принципе не могу изменить мои функции предварительной обработки tokenizer.texts_to_sequences - поэтому хочу использовать их повторно, но во время пакетирования. Может кто-нибудь помочь?

estimator_model = keras.estimator.model_to_estimator(keras_model=model, model_dir=outputdir)

def batchGen(tuples):      
    features = tuples[0]
    print("All Raw Features -- "+str(features))
    labels = tuples[1]
    print("All Raw Labels -- "+str(labels))
    num = 0
    while num<len(features):        
        yield (features[num], labels[num])
        num += 1

def train_fn_custom(features, labels, batch_size):    
    genSet = lambda:batchGen((features, labels))
    dataset = tf.data.Dataset.from_generator(genSet, output_types= tp.float32)

    def _preprocess_function(tuples):
        features = tuples[0]
        labels = tuples[1]

        features=tokenizer.texts_to_sequences(features, maxlen)
        features=sequence.pad_sequences(features, maxlen=maxlen)
        features=features.astype(np.float32)
        labels=utils.to_categorical(labels, nb_classes)
        labels=labels.astype(np.float32)
        return features, labels

    dataset = dataset.map(_preprocess_function)
    dataset = dataset.batch(batch_size)
    dataset = dataset.repeat(5) # E P O C H S
    return dataset

batch_size = 128
customTrain = lambda: train_fn_custom(x_train, y_train, batch_size)
estimator_model.train(input_fn=customTrain, steps=100)
...