LSTM cho người mới bắt đầu

matlab

#1

Chào mọi người/ anh /chị Em là sinh viên đang có một bài toán forecast điện năng tiêu thụ ( power consumption) sử dụng LSTM trên Matlab , em mới down thử code mẫu về LSTM về chạy thử thì nó ra kết quả như vậy, thì có được gọi là tốt chưa ạ ? Mong mọi người cho em tài liệu hay nguồn về LSTM cho người mới chưa biết gì về machine learning như em ạ, và trong đoạn code mẫu đó thì mình có thể làm sao để optimize kết quả ạ ? ‘’’

data=transpose(ans);

figure plot(data) xlabel(“HOUR”) ylabel(“KWH”)

title(“HOURLY POWER CONSUMPTION”)

numTimeStepsTrain = floor(0.85*numel(data));

XTrain = data(1:numTimeStepsTrain);

YTrain = data(2:numTimeStepsTrain+1);

XTest = data(numTimeStepsTrain+1:end-1);

YTest = data(numTimeStepsTrain+2:end);

mu = mean(XTrain); sig = std(XTrain);

XTrain = (XTrain - mu) / sig; YTrain = (YTrain - mu) / sig;

XTest = (XTest - mu) / sig;

inputSize = 1;

numResponses = 1;

numHiddenUnits = 200;

layers = [ …

sequenceInputLayer(inputSize)

lstmLayer(numHiddenUnits)

fullyConnectedLayer(numResponses)

regressionLayer];

opts = trainingOptions(‘adam’, …

‘MaxEpochs’,200, …

‘GradientThreshold’,1, …

‘InitialLearnRate’,0.005, …

‘LearnRateSchedule’,‘piecewise’, …

‘LearnRateDropPeriod’,125, …

‘LearnRateDropFactor’,0.2, …

‘Verbose’,0, …

‘Plots’,‘training-progress’);

net = trainNetwork(XTrain,YTrain,layers,opts);

net = predictAndUpdateState(net,XTrain);

[net,YPred] = predictAndUpdateState(net,YTrain(end));

numTimeStepsTest = numel(XTest);

for i = 2:numTimeStepsTest

[net,YPred(1,i)] = predictAndUpdateState(net,YPred(i-1));

end

YPred = sig*YPred + mu;

rmse = sqrt(mean((YPred-YTest).^2))

figure plot(data(1:numTimeStepsTrain))

hold on

idx = numTimeStepsTrain:(numTimeStepsTrain+numTimeStepsTest);

plot(idx,[data(numTimeStepsTrain) YPred],’.-’)

hold off

xlabel(“HOUR”)

ylabel(“KWH”)

title(“Forecast”)

legend([“Observed” “Forecast”])

figure

subplot(2,1,1)

plot(YTest)

hold on

plot(YPred,’.-’)

hold off legend([“Observed” “Forecast”])

ylabel(“KWH”)

title(“Forecast”)

subplot(2,1,2)

stem(YPred - YTest)

xlabel(“HOUR”)

ylabel(“Error”)

title("RMSE = " + rmse)

net = resetState(net); net = predictAndUpdateState(net,XTrain);

YPred = [];

numTimeStepsTest = numel(XTest);

for i = 1:numTimeStepsTest

[net,YPred(1,i)] = predictAndUpdateState(net,XTest(i));

end

YPred = sig*YPred + mu;

rmse = sqrt(mean((YPred-YTest).^2))

figure

subplot(2,1,1)

plot(YTest)

hold on

plot(YPred,’.-’)

hold off

legend([“Observed” “Predicted”])

ylabel(“KWH”)

title(“Forecast with Updates”)

subplot(2,1,2)

stem(YPred - YTest)

xlabel(“HOUR”)

ylabel(“Error”)

title("RMSE = " + rmse)


#2

Chỗ có code em để ảnh thế kia không ai nhìn thấy đâu. Em có thể chèn code trực tiếp vào trong diễn đàn được. Đặt giữa hai dòng ``` là được:

```python
print('hello world')
```

Kết quả:

print('hello world')

#4

Em sửa trực tiếp trong bài cũ đi.