【MATLAB第27期】源码分享 | 基于MATLAB的生成对抗网络GAN回归预测模型
源码可进行分享,放心使用,后台私信回复“27”即可,评论区无效。
原理:略。
一、主程序代码
%% 1.首先是预定义:
clear; clc; %%%clc是清除当前command区域的命令,表示清空,看着舒服些 。而clear用于清空环境变量。两者是不同的。
%%%装载数据集
train_x=rand(1,30);%train_x就是我们希望GAN网络能够生成与其相似的数据。其中
Neuron1=size(train_x,2);% 第一层神经元,与数据列数相等
[m,n]=size(train_x);%m表示train_x有多少行,n表示有多少列。
%%%定义模型
generator=nnsetup([Neuron1]);%[30,30]第一个30代表第一层有30个神经元,这是要与train_x的维度相同的,最后一个30也是要与train_x的维度相同。
discriminator=nnsetup([Neuron1 1]);%[30,1]第一个30要与生成器的最后一层的神经元个数相同,最后一层是1个神经元,输出的是每个样本来自于真实数据的概率。
%%参数设置
batch_size=m; %batchsize表示一次输入多少样本进行训练,因为我的数据量少,直接全部输入进去就行了。
iteration=1000;%迭代多少次,或者说走多少次正向传播。
images_num=m;
batch_num=floor(images_num / batch_size);
learning_rate=0.0001;
%% 8.第八部分, 上正餐,开始训练GAN。
for i=1:iteration
kk=randperm(images_num);
images_real=train_x;
noise=unifrnd(0,1,m,Neuron1);
generator=nnff(generator,noise);
images_fake=generator.layers{generator.layers_count}.a;
discriminator=nnff(discriminator,images_fake);
logits_fake=discriminator.layers{discriminator.layers_count}.z;
discriminator=nnbp_d(discriminator, logits_fake, ones(batch_size,1));
generator= nnbp_g(generator, discriminator);
generator=nnbp_g(generator, discriminator);
generator=nnapplygrade(generator,learning_rate);
%%%%%%%开始更新判别器
generator=nnff(generator,noise);
images_fake=generator.layers{generator.layers_count}.a;
images=[images_fake;images_real];
discriminator=nnff(discriminator,images);
logits=discriminator.layers{discriminator.layers_count}.z;
logits = discriminator.layers{discriminator.layers_count}.z;
labels = [zeros(batch_size,1); ones(batch_size,1)];%预定义一个标签,前面的数据是0,后面的是1,也进行了拼接。
discriminator = nnbp_d(discriminator, logits, labels);%logits与真实的标签进行对比,
discriminator = nnapplygrade(discriminator, learning_rate);%更新了辨别器网络的权重。
%----输出loss损失
c_loss(i,:) = sigmoid_cross_entropy(logits(1:batch_size), ones(batch_size,1));%这是生成器的损失
d_loss (i,:)= sigmoid_cross_entropy(logits, labels);%判别器的损失
end
figure()
plot(images_real)
hold on
plot(images_fake)
legend('实际值','GAN生成值')
二、运行效果
三、获取方式
后台私信回复“27”即可获得下载链接 ,源码分享,放心使用。