matlab代码 LSTM 实现分类 实例
时间: 2023-10-24 20:08:59 浏览: 145
这是一个简单的 MATLAB 代码示例,演示如何使用 LSTM(长短时记忆)神经网络来进行分类。
首先,我们需要准备一些训练数据和测试数据。在这个例子中,我们将使用一个人工制造的数据集,其中包含两个类别的数据点。
```
% 生成一些训练数据和测试数据
train_data = [randn(100,2)+2; randn(100,2)-2];
train_labels = [ones(100,1); zeros(100,1)];
test_data = [randn(50,2)+2; randn(50,2)-2];
test_labels = [ones(50,1); zeros(50,1)];
```
接下来,我们将定义 LSTM 神经网络模型。在这个例子中,我们将使用 2 个 LSTM 层和一个全连接层来进行分类。我们还需要定义一些超参数,例如网络的隐藏单元数量、学习率、训练次数等。
```
% 定义 LSTM 神经网络模型
num_hidden_units = 10;
learning_rate = 0.01;
num_epochs = 100;
layers = [
sequenceInputLayer(2)
lstmLayer(num_hidden_units,'OutputMode','last')
lstmLayer(num_hidden_units,'OutputMode','last')
fullyConnectedLayer(1)
sigmoidActivationLayer
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs', num_epochs, ...
'MiniBatchSize', 32, ...
'InitialLearnRate', learning_rate, ...
'GradientThreshold', 1, ...
'Shuffle', 'every-epoch', ...
'Plots','training-progress');
```
现在,我们可以使用 `trainNetwork` 函数来训练模型。训练过程中,我们将使用训练数据来更新模型的参数。
```
% 训练 LSTM 神经网络模型
net = trainNetwork(train_data', train_labels', layers, options);
```
训练完成后,我们可以使用 `classify` 函数来对测试数据进行分类,并计算分类准确率。
```
% 对测试数据进行分类并计算准确率
test_predictions = classify(net, test_data');
accuracy = sum(test_predictions == test_labels') / numel(test_labels);
fprintf('测试准确率:%.2f%%\n', accuracy * 100);
```
完整代码如下:
```
% 生成一些训练数据和测试数据
train_data = [randn(100,2)+2; randn(100,2)-2];
train_labels = [ones(100,1); zeros(100,1)];
test_data = [randn(50,2)+2; randn(50,2)-2];
test_labels = [ones(50,1); zeros(50,1)];
% 定义 LSTM 神经网络模型
num_hidden_units = 10;
learning_rate = 0.01;
num_epochs = 100;
layers = [
sequenceInputLayer(2)
lstmLayer(num_hidden_units,'OutputMode','last')
lstmLayer(num_hidden_units,'OutputMode','last')
fullyConnectedLayer(1)
sigmoidActivationLayer
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs', num_epochs, ...
'MiniBatchSize', 32, ...
'InitialLearnRate', learning_rate, ...
'GradientThreshold', 1, ...
'Shuffle', 'every-epoch', ...
'Plots','training-progress');
% 训练 LSTM 神经网络模型
net = trainNetwork(train_data', train_labels', layers, options);
% 对测试数据进行分类并计算准确率
test_predictions = classify(net, test_data');
accuracy = sum(test_predictions == test_labels') / numel(test_labels);
fprintf('测试准确率:%.2f%%\n', accuracy * 100);
```
阅读全文