matlab - Matlab 深度学习回归
问题描述
我正在尝试使用 Matlab 构建自己的回归网络。尽管到目前为止我所做的看起来有点毫无意义,但我确实想稍后将其扩展为一个稍微不寻常的网络,所以我自己做而不是从货架上拿东西。
我编写了以下代码:
% splitinto dev, val and test sets
[train_idxs,val_idxs,test_idxs] = dividerand(size(X,2));
training_X = X( : , train_idxs );
training_Y = Y( : , train_idxs );
val_X = X( : , val_idxs );
val_Y = Y( : , val_idxs );
test_X = X( : , test_idxs );
test_Y = Y( : , test_idxs );
input_count = size( training_X , 1 );
output_count = size( training_Y , 1 );
layers = [ ...
sequenceInputLayer(input_count)
fullyConnectedLayer(16)
reluLayer
fullyConnectedLayer(8)
reluLayer
fullyConnectedLayer(4)
reluLayer
fullyConnectedLayer(output_count)
regressionLayer
];
options = trainingOptions('sgdm', ...
'MaxEpochs',8, ...
'MiniBatchSize', 1000 , ...
'ValidationData',{val_X,val_Y}, ...
'ValidationFrequency',30, ...
'ValidationPatience',5, ...
'Verbose',true, ...
'Plots','training-progress');
size( training_X )
size( training_Y )
size( val_X )
size( val_Y )
layers
net = trainNetwork(training_X,training_Y,layers,options);
view( net );
pred_Y = predict(net,test_X)
我无法分享 X 和 Y 实际上是什么,但输入 X 是一个 3xn 双精度数组,输出 Y 是一个最初来自 Matlab 表的 2xn 数组。
这是输出:
ans =
3 547993
ans =
2 547993
ans =
3 117427
ans =
2 117427
layers =
9x1 Layer array with layers:
1 '' Sequence Input Sequence input with 3 dimensions
2 '' Fully Connected 16 fully connected layer
3 '' ReLU ReLU
4 '' Fully Connected 8 fully connected layer
5 '' ReLU ReLU
6 '' Fully Connected 4 fully connected layer
7 '' ReLU ReLU
8 '' Fully Connected 2 fully connected layer
9 '' Regression Output mean-squared-error
Training on single CPU.
|======================================================================================================================|
| Epoch | Iteration | Time Elapsed | Mini-batch | Validation | Mini-batch | Validation | Base Learning |
| | | (hh:mm:ss) | RMSE | RMSE | Loss | Loss | Rate |
|======================================================================================================================|
| 1 | 1 | 00:00:02 | 0.88 | 4509.94 | 0.3911 | 1.0170e+07 | 0.0100 |
| 8 | 8 | 00:00:04 | NaN | NaN | NaN | NaN | 0.0100 |
|======================================================================================================================|
Error using view (line 73)
Invalid input arguments
Error in layer (line 85)
view( net );
显然正在发生一些病态的事情,因为训练几乎是瞬时的,我无法查看生成的网络。谁能告诉我我做错了什么?或者也许给出一些调试技巧?
谢谢,亚当。
解决方案
这里有两个问题:第一个是调用view(net)
失败。原因是view()
函数只适用于network
对象。该类network
和相应的方法多年来一直是神经网络工具箱的一部分,旨在用于浅层的“经典”神经网络。
但是,您训练net
的是 a SeriesNetwork
,这是一个更新得多的类,用于深度学习。您不能混合 和 的功能network
,SeriesNetwork
因此view()
在这里不起作用。
有一个类似的函数analyzeNetwork()
用于以图形方式查看和分析深度神经网络,SeriesNetwork
格式如下:
analyzeNetwork(net)
第二个问题是 RMSE 和损失NaN
在训练之后是(不是一个数字)。如果没有您的实际数据,很难诊断出这种情况的原因。
一个可能的原因:您的数据包含NaN
在输入或输出中。您可以使用以下isnan()
功能进行检查:
any(isnan(training_X(:)))
如果不是这种情况,那么您可以检查权重和偏差初始化或学习率。
推荐阅读
- javascript - Javascript 传递 id - 视图到控制器 -
- ios - 在 unwind segue、dismiss 和 popViewController 之间选择以“关闭”当前视图控制器
- linux - 64 位汇编 - 打印出参数的问题
- mysql - 如何修复“ERROR 1064 (42000): You have an error in your SQL syntax;” 在mysql中
- javascript - 动态隐藏 v-text-field
- javascript - 从嵌套数组中获取对象中的值路径
- webpack - webpack - 如何使用插件 html-webpack-plugin 在正文中的特定位置注入生成的包文件名
- twitter - Twitter 广告 API:无法检索所有推广推文
- python - Tensorflow 中的单个图像预测与批量评估不同
- kotlin - 卡在给定数组的逻辑上