Как ввести двумерный массив в Keras-Python? - PullRequest
0 голосов
/ 01 ноября 2018

Я очень плохо знаком с машинным обучением и keras и застрял при попытке ввода данных; У меня есть данные, которые выглядят так:

[[[0.01363717 0.        ]
  [0.01577874 0.        ]
  [0.01463021 0.        ]]

 [[0.01577874 0.        ]
  [0.01463021 0.        ]
  [0.01006721 0.        ]]

 [[0.01463021 0.        ]
  [0.01006721 0.        ]
  [0.00762504 0.        ]]...]

Форма данных: (1607, 3, 2). Как я могу пройти:

 [[0.01363717 0.        ]
  [0.01577874 0.        ]
  [0.01463021 0.        ]]

как ввод в слое из 512 ячеек CuDNNLSTM?

Вот моя вся сеть:

def create_model():
    model = Sequential()

    model.add(CuDNNLSTM(512, input_shape=(3,2), return_sequences=True, name='inputlstm1'))
    model.add(Dropout(0.2))

    model.add(CuDNNLSTM(512, return_sequences=True,name='lstm2'))
    model.add(Dropout(0.2))

    model.add(CuDNNLSTM(512, return_sequences=True,name='lstm3'))
    model.add(Dropout(0.2))

    model.add(Dense(32, activation='relu', name='dense1'))
    model.add(Dropout(0.2))

    model.add(Dense(1, activation='softmax', name='denseoutput2'))


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

И его примерка:

model=create_model()
history=model.fit(xtrain, ytrain,batch_size=1, epochs=5, validation_data=(xtest, ytest), verbose=1)

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Построение слоев keras включает в себя указание формы пройденного массива, здесь форму обучаемого массива составляет (3,2) с 1607 выборками,

input_shape = (3,2)
X = LSTM(124, activation = 'sigmoid', name='layer1', dropout = 0.4) (temp)

Если вы хотите использовать составной LSTM, вы можете использовать это

input_shape = (3,2)
    X = LSTM(124, activation = 'sigmoid', name='layer1', dropout = 0.4,return_sequences=True) (temp)
    X = LSTM(64, activation = 'sigmoid', name='layer2', dropout = 0.4) (X)

редактировать

def create_model():
    model = keras.models.Sequential()

    model.add(keras.layers.CuDNNLSTM(512, input_shape=(3,2), return_sequences=True, name='inputlstm1'))
    model.add(keras.layers.Dropout(0.2))

    model.add(keras.layers.CuDNNLSTM(512, return_sequences=True,name='lstm2'))
    model.add(keras.layers.Dropout(0.2))

    # The last layer of Stacked LSTM need not to return the input sequences
    model.add(keras.layers.CuDNNLSTM(512,name='lstm3'))
    model.add(keras.layers.Dropout(0.2))

    model.add(keras.layers.Dense(32, activation='relu', name='dense1'))
    model.add(keras.layers.Dropout(0.2))

    model.add(keras.layers.Dense(1, activation='softmax', name='denseoutput2'))


    # Compile model
    model.compile(
        loss='mse',
        optimizer='adam',
        metrics=['accuracy'],
    )
    return model 
0 голосов
/ 01 ноября 2018

Вы можете установить batch_size = 1, и Keras позаботится об этом. Просто поместите весь массив на вход модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...