Я пытаюсь поиграть со своей первой моделью 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 в моей ситуации? Неправильно ли сформированы тензоры? Что мне не хватает?
Спасибо, я очень ждал, когда это заработает, и понимаю, почему это не работает. Чтобы запачкать руки машинным обучением.