Ошибка при ссылке на класс в его методе __init__ - PullRequest
0 голосов
/ 11 июля 2019

Я помещаю ( код Tensorflow NMT ) в основной класс. Кодовая база имеет два класса - «Кодировщик» и «Декодер». На них ссылаются в соответствующих методах init. Однако возникает ошибка - «неопределенный кодировщик с именем».

class TranslationModel(ModelBase):



    pathToZip = tf.keras.utils.get_file('spa-eng.zip', origin='http://download.tensorflow.org/data/spa-eng.zip', extract=True)

    pathToFile = os.path.dirname(pathToZip)+"/spa-eng/spa.txt"


    def __init__(self,
                 batchSize = 64,
                 bufferSize = None,
                 numberOfBatches = None,
                 units = 1024,
                 vocabInputSize = None,
                 vocabTargetSize = None,
                 optimizer = tf.train.AdamOptimizer(),
                 dataSetPath = None,
                 inputTensor = None,
                 targetTensor = None,
                 inputLanguage = None,
                 targetLanguage = None,
                 maxLengthInput = None,
                 maxLengthTarget = None,
                 embeddingDimension  = 256, *arg, **kwargs):
        self.batchSize          = 64
        self.bufferSize         = None
        self.numberOfBatches    = None
        self.units              = units
        self.vocabInputSize     = None
        self.vocabTargetSize    = None
        self.optimizer          = optimizer
        self.dataSetPath        = dataSetPath
        self.targetTensor       = targetTensor
        self.inputTensor        = inputTensor
        self.inputLanguage      = inputLanguage
        self.targetLanguage     = targetLanguage
        self.maxLengthInput     = maxLengthInput
        self.maxLengthTarget    = maxLengthTarget
        self.embeddingDimension = embeddingDimension
        super().__init__(*arg, **kwargs)

        #OTHER FUNCTIONS HERE

    class Encoder(tf.keras.Model):
        def __init__(self, vocabSize, embeddingDimension, encoderUnits, batchSize):
            super(Encoder, self).__init__() # Raises error - 'Undefined named Encoder'
        #Other code here



    class Decoder(tf.keras.Model):
        def __init__(self, vocabSize, embeddingDimension, dec_units, batchSize):
            super('Decoder', self).__init__() # Raises error - 'Undefined named Decoder'
        ## Other code

1 Ответ

0 голосов
/ 11 июля 2019

Это потому, что когда у вас есть класс внутри другого и вы хотите его идентифицировать, вы должны сделать это следующим образом: OutterClass.InnerClass

он не будет работать, если вы просто используете: InnerClass

для вашего случая это TranslationModel.Encoder

...