добавление слоя LSTM, но получение требуемого позиционного аргумента: ошибка «единиц» - PullRequest
2 голосов
/ 29 марта 2019

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

return_sequences = True)) Ошибка типа: 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")

Так как он сказал, что единицы измерения отсутствуют, я также попробовал следующую строку,

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

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

TypeError: ('Аргумент ключевого слова не понят:', 'input_dim')

1 Ответ

1 голос
/ 29 марта 2019

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
_________________________________________________________________
...