добавление слоя LSTM, но получение требуемого позиционного аргумента: ошибка ‘units’

#python #tensorflow #keras #recurrent-neural-network

#python #tensorflow #keras #рекуррентная нейронная сеть

Вопрос:

Я пытаюсь запустить свою первую модель машинного обучения. Однако я получаю сообщение об ошибке ниже.

return_sequences=True)) Ошибка TypeError: init() отсутствует 1 требуемый позиционный аргумент: ‘units’

 from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, LSTM, Dropout

model = Sequential()

model.add(LSTM(input_dim=1,
           output_dim=50,
           return_sequences=True))

model.add(Dropout(0.2))

model.add(LSTM(100, return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(output_dim=1))
model.add(Activation('linear'))

start = time.time()

model.compile(loss="mse", optimizer="rmsprop")
  

Поскольку в нем говорилось, что параметр units отсутствует, я также попробовал следующую строку,

 model.add(LSTM(100,
           input_dim=1,
           output_dim=50,
           return_sequences=True))
  

Затем получаю это сообщение об ошибке, но я не понимаю, почему это не появляется при моей первой попытке. Чего я не понимаю?

Ошибка TypeError: (‘Аргумент ключевого слова не понят:’, ‘input_dim’)

Ответ №1:

units является первым параметром LSTM , который представляет последнее измерение выходных данных на этом уровне. Это показывает первую ошибку, потому что ваш код не имеет units при вашей первой попытке. units удовлетворяет условию, так что при второй попытке отображается вторая ошибка.

В этом случае вы должны использовать input_shape параметр, чтобы указать форму ввода первого слоя. Ваш первый LSTM слой input_shape должен содержать два данных ( timestep и feature , batch_size по умолчанию заполнять не нужно), поскольку LSTM требует трехмерного ввода. Предполагая, что ваш временной шаг равен 10, ваш код должен быть изменен на следующий.

 from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, LSTM, Dropout,Activation

model = Sequential()
model.add(LSTM(units=100,input_shape=(10,1),return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(100, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.add(Activation('linear'))
model.compile(loss="mse", optimizer="rmsprop")
print(model.summary())

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)                  (None, 10, 100)           40800     
_________________________________________________________________
dropout (Dropout)            (None, 10, 100)           0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 100)               80400     
_________________________________________________________________
dropout_1 (Dropout)          (None, 100)               0         
_________________________________________________________________
dense (Dense)                (None, 1)                 101       
_________________________________________________________________
activation (Activation)      (None, 1)                 0         
=================================================================
Total params: 121,301
Trainable params: 121,301
Non-trainable params: 0
_________________________________________________________________
  

Комментарии:

1. спасибо за четкий ответ, высоко ценится. Активация (‘linear’), из какой библиотеки активирована, поскольку мой код ее не распознает?

2. @mHelpMe Activation — это слой keras. Я добавил это в ответ.