- 积分
- 12185
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-8-16
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 东水兽 于 2019-9-8 12:49 编辑
最近在用卷积神经网络做降水预报,但是在使用MATLAB自带的函数进行编程时遇到了点问题。
在运行程序的时候,程序总是报错,说我验证集输入维数与训练集不一致,这我就不理解了
求大佬帮助
附录一:源代码
%% 导入处理好的数据
load factor.mat
load precip.mat
%% 输入训练数据
% 训练数据--变量值
P=factor_avage;
% 训练变量--结果值
T=precip_yangtze_all_avage;
%% 随机产生训练集和测试集数据
% temp=randperm(size(P,1));
temp=[37,19,20,47,22,35,13,8,23,24,57,49,48,9,4,60,17,67,31,64,5,51,54,39,58,18,11,65,3,28,56,34,66,21,62,25,30,63,16,15,61,33,10,53,2,26,14,41,40,45,7,43,42,12,27,59,6,46,32,1,52,44,55,50,36,29,38];
% 训练集60个样本
P_train=P(temp(1:60),:)';
T_train=T(temp(1:60),:)';
% 测试集7个样本
P_test=P(temp(61:end),:)';
T_test=T(temp(61:end),:)';
N = size(P_test,2);
%% 数据归一化
[p_train, ps_input]=mapminmax(P_train,0,1); % 训练集输入变量的归一化
p_test=mapminmax('apply',P_test,ps_input); % 测试集输入变量的归一化
[t_train,ps_output]=mapminmax(T_train,0,1); % 训练集输入结果的归一化
t_test=mapminmax('apply',T_test,ps_output); % 测试集输入结果的归一化
%% CNN模型的构建
% 创建网络层
layers = [
imageInputLayer([60 111 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
averagePooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
averagePooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
dropoutLayer(0.2)
fullyConnectedLayer(60)
regressionLayer];
% 训练网络
miniBatchSize=20;
validationFrequency=floor(numel(t_train)/miniBatchSize); % 验证频率的定义
% 参数设置
options = trainingOptions('sgdm', ...
'MiniBatchSize',miniBatchSize, ...
'MaxEpochs',500, ... % 训练次数
'InitialLearnRate',1e-3, ... % 初始学习率
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.1, ...
'LearnRateDropPeriod',20, ... % 在20轮后降低学习率
'Shuffle','every-epoch', ...
'ValidationData',{p_test',t_test}, ... % 测试集数据
'ValidationFrequency',validationFrequency, ...
'Plots','training-progress', ...
'Verbose',false);
cnnnet=trainNetwork(p_train',t_train,layers,options);
layers(1,1).InputSize(1,1)=7;
t_sim=predict(cnnnet,p_test);
附录二
源程序与数据 我放在网盘了,不消耗大家的积分了(我居然没有权限放ulr链接(尴尬))
http(删除)s://pan.baidu.com(删除)/s/15s_FnLo(删除)GVdPImq(删除)3wvG0eSQ
|
|