最近ニューラルネットワークを学び始めたばかりですが、最初は浅い理解に触れるのは問題ないのですが、深い理解にはまだまだ継続的な練習が必要だと感じています。BP はフィードフォワード操作ですが、誤差はフィードバック可能です。勾配降下法に従って、最終データが要求を満たすまで重みを継続的に調整します (局所最小値に落ちやすい)。 newff 関数の使用法matlab が newff (フィードフォワードおよびバックプロパゲーション ネットワーク) を説明する_xiaotao_1 のブログ-CSDN blog_matlab newffz
この説明はとても良いと思いますが、内部のパラメータを理解する必要があります。
Matlab による BP ニューラル ネットワークの記述方法:
1. データのインポート(.matデータのインポート、load関数付きインポート)
2. トレーニング セットとテスト セットをランダムに生成します (randperm 関数を使用してデータの順序をスクランブルし、全体のデータをトレーニング セットとテスト セットに分割します)。
3. データ正規化 (データ正規化には、mapminmax 関数、mapminmax('apply',n,x) を使用します。n はテスト データ、x はトレーニング セットのデータ特徴です)
4. BP ニューラル ネットワークを作成します (newff 関数、newff(p_train,t_train,9)、9 は隠れ層の数です)
5. トレーニングパラメータを設定する
6. ネットワークをトレーニングします (トレーニングにはトレーニング機能を使用します)
7. シミュレーションテスト(sim機能によるシミュレーションテスト)
8. データの非正規化 (非正規化用のmapminmax('reverse', t_sim, ps_output))
その後、パフォーマンス評価を実行します
9. 相対誤差
10. 決定係数
11. 結果の比較
その後、操作を実行できます
% 1. 导入数据
load spectra_data.mat%用load函数
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));%randperm函数为打乱总体数据的顺序
% 训练集——50个样本
P_train = NIR(temp(1:50),:)';%根据newff函数里面的参数要求,所以要让训练集和测试集的输入数据和输出数据的列相同,所以用’
T_train = octane(temp(1:50),:)';%因为要让训练集和测试集的输入数据和输出数据的列相同,所以用’
% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);
%% III. 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1);%用mapminmax函数进行归一化
p_test = mapminmax('apply',P_test,ps_input);%用P_train归一化得到的数据特征将P_test的数据进行相同性质的归一化;
[t_train, ps_output] = mapminmax(T_train,0,1);%对训练集的输出数据进行归一化
%% IV. BP神经网络创建、训练及仿真测试
% 1. 创建网络
net = newff(p_train,t_train,9);%创建BP网络
% 2. 设置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;
% 3. 训练网络
net = train(net,p_train,t_train);
% 4. 仿真测试
t_sim = sim(net,p_test);%用sim函数进行仿真测试
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);%ps_output是T_train的归一化数据特征
BP ニューラル ネットワークの長所と短所:
アドバンテージ:
1. 自己学習と適応能力
2. 非線形マッピング機能
3. 一定の耐障害性を備えている
4. 学習結果を新しい知識に適用する
欠点:
1. ローカルミニマムに陥りやすい
2. アルゴリズムの収束速度が遅い
3. ネットワーク構造の選択。大きすぎると過剰適合しやすく、小さすぎると収束に失敗しやすくなります。
4. 典型的なサンプルに依存しすぎ、多数の典型的なサンプルが必要になる