Потеряно на входной форме (попытка модели Tensorflow. js LSTM) - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь поиграть со своей первой моделью LSTM на Tensorflow. js, но я в значительной степени застрял на фигурах (я думаю) 1004 *

и выходной массив:

Y = [
  [ 0.0028556470420255664 ],
  [ 0.006330620210385884 ],
  [ -0.0029661016949151797 ],
  ...
]

Создание тензоров, например:

const xs = tf.tensor2d(X, [X.length, X[0].length]);
const ys = tf.tensor2d(Y, [Y.length, 1]);

, затем модель и ее обучение, например:

const model = tf.sequential();
model.add(tf.layers.lstm({units: 10, inputShape: [10] }));
model.add(tf.layers.dropout({rate: 0.25}));
model.add(tf.layers.dense({units: 1 }));
model.add(tf.layers.activation({ activation: 'linear' }));

model.compile({
    optimizer: tf.train.adam(),
    loss: 'meanAbsoluteError'
});

model.fit(xs, ys, {
    batchSize: 4, epochs: 50, callbacks: {
        onEpochEnd: async (epoch, log) => {
            console.log("Epoch: ", epoch, " - ", log);
        }
    }
});

Keek получение ошибки "Error: Input 0 is incompatible with layer lstm_LSTM1: expected ndim=3, found ndim=2" ..... попытался изменить inputShape на что-то другое, не давая ошибки перед обучением, но давая другую ошибку "Error when checking input: expected lstm_LSTM1_input to have 3 dimension(s). but got array with shape 168418,10" в поезде ..... Итак, я предполагаю, что я все в любом случае неправильно с формой, как-то lol, это модель, на которую я пытался перейти. js из python, это именно то, что мне нужно, но на неправильном языке ..... исходная модель в python это :

def build_lstm_model(input_data, output_size=1, neurons=20, activ_func='linear', dropout=0.25, loss='mae', optimizer='adam'):
    model = Sequential()
    model.add(LSTM(neurons, input_shape=( input_data.shape[1], input_data.shape[2])))
    model.add(Dropout(dropout))
    model.add(Dense(units=output_size))
    model.add(Activation(activ_func))
    model.compile(loss=loss, optimizer=optimizer)

и обучение:

history = model.fit(X_train, y_train, epochs=50, batch_size=4)

Что такое inputShape в моей ситуации? Неправильно ли сформированы тензоры? Что мне не хватает?

Спасибо, я очень ждал, когда это заработает, и понимаю, почему это не работает. Чтобы запачкать руки машинным обучением.

1 Ответ

1 голос
/ 28 мая 2020

input shape из keras.layers.LSTM - (размер пакета, временной шаг, характеристики). Как видите, структура RNN была создана для данных, зависящих от времени, поэтому, если ваши данные не содержат информации о времени, лучше не использовать ее. С другой стороны, если у вас есть информация о времени , тогда убедитесь, что ваша входная форма - это 3D-вход (размер пакета + временной шаг и функции = 1 + 2). Если вы не установите размер пакета, keras установит его на None, который будет служить batch size=1, так что ничего страшного, если вы его не настраивали. В вашем случае вы просто используете inputShape: [10], который не является форматом для использования keras.layers.LSTM. Если вы все равно хотите попробовать применить LSTM , расширьте размер для вашего ввода и не забудьте изменить inputShape, который следует за вами.

...