ошибка в обработке LSTM в PKL на терминале - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь запустить проект с открытым исходным кодом на терминале, но у меня возникают ошибки при обработке PKL, какое-то решение, я ценю это!

Ошибка: файл "/home/luciano/anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py", строка 145, в str standardize_input_data (data_shape)) ValueError: Ошибка при проверке цели: ожидается, что плотность_1 будет иметь форму (9,), но получен массив с формой (2,)

Ubuntu 19.10, Anaconda 3, Keras 2.3.1.

следует примеру файл LSTM:

from __future__ import absolute_import, division, print_function, unicode_literals
from keras.preprocessing import sequence
from keras.datasets import imdb
from keras import layers, models
import pickle
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.utils import to_categorical
import argparse


class Data:
    def __init__(self,pklname):

        X = []
        Y = []
        maxlength=0
        with open(pklname, 'rb') as fin:
            frames = pickle.load(fin)
            for i, frame in enumerate(frames):
                features = frame[0]
                maxlength=len(features)
                word = frame[1]

                X.append(np.array(features))
                Y.append(word)
        X = np.array (X)
        Y = np.array(Y)

        t = Tokenizer()
        t.fit_on_texts(Y)
        #print(t.word_index)
        #Y = to_categorical(Y,len(t.word_index))
        encoded=t.texts_to_sequences(Y)
        #print(encoded)
        one_hot=to_categorical(encoded)
        #print(one_hot)


        (x_train, y_train) = X, one_hot

        self.x_train, self.y_train = x_train, y_train
        self.x_test, self.y_test = x_train, y_train
        self.length=maxlength

class RNN_LSTM(models.Model):
    def __init__(self,maxlen):
        x = layers.Input((maxlen,))
        h = layers.Embedding(maxlen, 128)(x)
        h = layers.LSTM(128, dropout=0.2, recurrent_dropout=0.2)(h)
        y = layers.Dense(9, activation='softmax')(h)
        super().__init__(x, y)

        # try using different optimizers and different optimizer configs
        self.compile(loss='binary_crossentropy',
                     optimizer='adam', metrics=['accuracy'])


class Machine:
    def __init__(self,pklname):
        self.data = Data(pklname)
        self.model = RNN_LSTM(self.data.length)

    def run(self, epochs=3, batch_size=32):
        data = self.data
        model = self.model
        print('Training stage')
        print('==============')
        model.fit(data.x_train, data.y_train,
                  batch_size=batch_size,
                  epochs=epochs,
                  validation_data=(data.x_test, data.y_test))

        score, acc = model.evaluate(data.x_test, data.y_test,
                                    batch_size=batch_size)
        print('Test performance: accuracy={0}, loss={1}'.format(acc, score))


def main(pklname):
    m = Machine(pklname)
    m.run()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='run Model')
    parser.add_argument("--input_file",help=" ")
    args=parser.parse_args()
    input_file=args.input_file
    main(input_file)
...