【问题标题】:TypeError: __init__() missing 1 required positional argument: 'output_size'类型错误:__init__() 缺少 1 个必需的位置参数:'output_size'
【发布时间】:2017-07-05 07:35:00
【问题描述】:

您好,我遇到了以下错误。请让我知道如何去做。

我遇到了与model.add(TimeDistributedDense(self.output_size)) 中的参数相关的错误

    from __future__ import print_function
    from keras.preprocessing import sequence
    from keras.models import Sequential
    from keras.layers.core import Activation, RepeatVector, TimeDistributedDense, Dropout, Dense
    from keras.layers import recurrent
    from keras.layers.embeddings import Embedding
    import numpy as np
    from preprocessing import preprocess
    import pdb
    RNN = recurrent.LSTM


    class seq2seq(object):
    # Initialize model parameters
        def __init__(self, input_size, seqlen, output_size, input_dim = 100, \
             hidden_dim = 200):
            self.maxlen = seqlen
            self.input_size = input_size
            self.output_size = output_size
            self.input_dim = input_dim
            self.hidden_dim = hidden_dim

        def seq2seq_plain(self):
        # Plain seq2seq
            model = Sequential()
            model.add(Embedding(self.input_size , self.input_dim))
            model.add(RNN(self.hidden_dim, return_sequences=True))#, input_shape=(100, 128)))

            model.add(Dropout(0.25))
            model.add(RNN(self.hidden_dim))
            model.add(RepeatVector(self.maxlen))
            #model.add(RNN(self.hidden_dim, return_sequences=True))
            #model.add(Dropout(0.25))
            model.add(RNN(self.hidden_dim, return_sequences=True))
            model.add(TimeDistributedDense(self.output_size))
            model.add(Dropout(0.5))
            model.add(Activation('softmax'))

            model.compile(loss='categorical_crossentropy', optimizer='adam',
                  metrics=['accuracy'])
            return model

       def seq2seq_attention(self):
            raise NotImplementedError


    if __name__ == "__main__":
    # Test the model 
    seq2seq = seq2seq(15, 5500)
    seq2seq.train_seq2seq()

错误:

    Traceback (most recent call last):

     File "<ipython-input-36-392427814c8f>", line 50, in <module>
     seq2seq = seq2seq(15, 5500)

     TypeError: __init__() missing 1 required positional argument: 'output_size'

【问题讨论】:

标签: python python-3.x keras typeerror self


【解决方案1】:

这是构造函数:

def __init__(self, input_size, seqlen, output_size, input_dim = 100, hidden_dim = 200)

这意味着你必须至少传递input_sizeseqlenoutput_size的值,即你必须传递3个参数。 input_dimhidden_dim 等其他参数具有默认值,因此您不必在创建对象时为它们提供值。但是你必须在创建对象时传递 3 个参数。

您当前通过仅传递 2 个 参数来创建对象。

 seq2seq = seq2seq(15, 5500)

通过为output_size 提供1 个 参数来更改它,因为它没有任何默认值。

修改:

  1. 为 output_size 再传递 1 个参数
  2. 对象名应该与类名不同

结果:

seq2seq_obj = seq2seq(15, 5500, 10) # 1 more parameter for output_size

【讨论】:

  • 很好地解释了 HarSha!
猜你喜欢
  • 2022-01-11
  • 2021-07-06
  • 2023-03-19
  • 2020-01-29
  • 2017-10-30
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多