Matlab可视化神经网络函数

只需输入神经网络参数parameter(权重和系数)的结构体。

function plot_fully_connected_network(parameters)
    layers = fieldnames(parameters); % 获取所有层的名字
    numLayers = numel(layers);
    
    % 确定每层的神经元数目并找到最大值
    neuronsPerLayer = arrayfun(@(x) numel(parameters.(layers{x}).Bias), 1:numLayers);
    maxNeurons = max(neuronsPerLayer);
    
    % 确定输入层神经元的数量
    inputNeurons = size(parameters.(layers{1}).Weights, 2);
    
    figure;
    hold on;
    
    % 设置图形属性
    xlim([0, numLayers + 2]);
    ylim([0, maxNeurons + 1]);
    xlabel(['Layer=' num2str(numLayers+1)]);
    ylabel('Neurons');
     
    % 绘制连接,如果权重不为零
    for i = 1:numLayers
        currYPos = (maxNeurons - neuronsPerLayer(i)) / 2 + 1 : (maxNeurons + neuronsPerLayer(i)) / 2;
        if i == 1
            prevYPos = (maxNeurons - inputNeurons) / 2 + 1 : (maxNeurons + inputNeurons) / 2;
            weights = parameters.(layers{i}).Weights;
        else
            prevYPos = (maxNeurons - neuronsPerLayer(i-1)) / 2 + 1 : (maxNeurons + neuronsPerLayer(i-1)) / 2;
            weights = parameters.(layers{i}).Weights;
        end
        
        for j = 1:numel(prevYPos)
            for k = 1:numel(currYPos)
                if weights(k, j) ~= 0 % 检查权重是否为零
                    % % 连接线随权重大小而改变粗细
                    % lineWidth = min(abs(weights(k, j)) * 5, 5);
                    % lineWidth = double(gather(extractdata(max(lineWidth, 0.1))));                   
                    % line([i, i+1], [prevYPos(j), currYPos(k)], 'Color', [0 0 0], 'LineWidth', lineWidth);
                    % 连接线全部一样粗细
                    line([i, i+1], [prevYPos(j), currYPos(k)], 'Color', [0 0 0]);
                end
            end
        end
    end

    % 绘制神经元,确保垂直居中
    for i = 0:numLayers
        if i == 0
            numNeurons = inputNeurons;
        else
            numNeurons = neuronsPerLayer(i);
        end
        % 计算垂直居中的位置
        yPos = (maxNeurons - numNeurons) / 2 + 1 : (maxNeurons + numNeurons) / 2;
        plot(i + 1, yPos, 'bo', 'MarkerSize', 20, 'MarkerFaceColor', 'r');
    end
    
    % 设置坐标轴标签
    xticklabels = {'输入层'};
    for i = 1:numLayers-1
        xticklabels{end+1} = ['隐藏层' num2str(i)];
    end
    xticklabels{end+1} = '输出层';
    set(gca, 'YDir', 'reverse')
    set(gca, 'XTick', 1:(numLayers + 1), 'XTickLabel', xticklabels);
    set(gca, 'YTick', []);
    set(gca, 'XAxisLocation', 'origin', 'YAxisLocation', 'origin');
    
    
    hold off;
end

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值