Задайте пользовательский слой глубокого обучения с отформатированными входными параметрами

Если Deep Learning Toolbox™ не обеспечивает слой, вы требуете для своей задачи, то можно задать собственный слой с помощью этого примера в качестве руководства. Для списка встроенных слоев смотрите Список слоев глубокого обучения.

Чтобы задать пользовательский слой глубокого обучения, можно использовать шаблон, обеспеченный в этом примере, который берет вас через следующие шаги:

  1. Назовите слой – Дают слою имя так, чтобы можно было использовать его в MATLAB®.

  2. Объявите, что свойства слоя – Задают свойства слоя и какие параметры изучены во время обучения.

  3. Создайте (дополнительную) функцию конструктора – Задают, как создать слой и инициализировать его свойства. Если вы не задаете функцию конструктора, то при создании, программное обеспечение инициализирует NameОписание, и Type свойства с [] и определяет номер вводов и выводов слоя к 1.

  4. Создайте прямые функции – Задают, как данные передают вперед через слой (прямое распространение) во время предсказания и в учебное время.

  5. Создайте обратную (дополнительную) функцию – Задают производные потери относительно входных данных и настраиваемых параметров (обратное распространение). Если вы не задаете обратную функцию, то прямые функции должны поддержать dlarray объекты.

Определение обратной функции является дополнительным, когда прямые функции поддерживают dlarray объекты, как введено. Используя dlarray объекты делают работу с высокими размерными данными легче, позволяя вам пометить размерности. Например, можно пометить, которому размерности соответствуют пространственный, время, канал, и обрабатывают размерности в пакетном режиме с помощью 'S'TC, и 'B' метки, соответственно. Для незаданных и других размерностей используйте 'U' метка. Для dlarray возразите функциям, которые действуют по конкретным размерностям, можно задать метки размерности путем форматирования dlarray возразите непосредственно, или при помощи 'DataFormat' опция.

Используя отформатированный dlarray объекты в пользовательских слоях также позволяют вам задавать слои, где вводы и выводы имеют различные форматы, такие как слои, которые переставляют, добавляют или удаляют размерности. Например, можно задать слой, который берет в качестве входа мини-пакет изображений с форматом 'SSCB' (пространственный, пространственный, канал, пакет) и выход мини-пакет последовательностей с форматом 'CBT' (образуйте канал, обработайте в пакетном режиме, время).

Включить поддержку использования отформатированного dlarray объекты в пользовательском слое прямые функции, также наследуйтесь nnet.layer.Formattable класс при определении пользовательского слоя.

В этом примере показано, как создать проект и изменить слой, который является слоем, обычно используемым в порождающих соперничающих сетях (GANs), который берет массив шума с форматом 'CB' (образуйте канал, пакет), и проекты и изменяют его к мини-пакету изображений с форматом 'SSCB' (пространственный, пространственный, канал, пакет) использующий полностью соединенный, изменяются и повторно помечают операции.

Для примера, показывающего, как обучить GAN с проектом и изменить слой, смотрите, Обучают Порождающую соперничающую сеть (GAN).

Слой с шаблоном настраиваемых параметров

Скопируйте слой с шаблоном настраиваемых параметров в новый файл в MATLAB. Этот шаблон обрисовывает в общих чертах структуру слоя с настраиваемыми параметрами и включает функции, которые задают поведение слоя.

classdef myLayer < nnet.layer.Layer % & nnet.layer.Formattable (Optional) 

    properties
        % (Optional) Layer properties.

        % Layer properties go here.
    end

    properties (Learnable)
        % (Optional) Layer learnable parameters.

        % Layer learnable parameters go here.
    end
    
    methods
        function layer = myLayer()
            % (Optional) Create a myLayer.
            % This function must have the same name as the class.

            % Layer constructor function goes here.
        end
        
        function [Z1, …, Zm] = predict(layer, X1, …, Xn)
            % Forward input data through the layer at prediction time and
            % output the result.
            %
            % Inputs:
            %         layer       - Layer to forward propagate through
            %         X1, ..., Xn - Input data
            % Outputs:
            %         Z1, ..., Zm - Outputs of layer forward function
            
            % Layer forward function for prediction goes here.
        end

        function [Z1, …, Zm, memory] = forward(layer, X1, …, Xn)
            % (Optional) Forward input data through the layer at training
            % time and output the result and a memory value.
            %
            % Inputs:
            %         layer       - Layer to forward propagate through
            %         X1, ..., Xn - Input data
            % Outputs:
            %         Z1, ..., Zm - Outputs of layer forward function
            %         memory      - Memory value for custom backward propagation

            % Layer forward function for training goes here.
        end

        function [dLdX1, …, dLdXn, dLdW1, …, dLdWk] = ...
                backward(layer, X1, …, Xn, Z1, …, Zm, dLdZ1, …, dLdZm, memory)
            % (Optional) Backward propagate the derivative of the loss  
            % function through the layer.
            %
            % Inputs:
            %         layer             - Layer to backward propagate through
            %         X1, ..., Xn       - Input data
            %         Z1, ..., Zm       - Outputs of layer forward function            
            %         dLdZ1, ..., dLdZm - Gradients propagated from the next layers
            %         memory            - Memory value from forward function
            % Outputs:
            %         dLdX1, ..., dLdXn - Derivatives of the loss with respect to the
            %                             inputs
            %         dLdW1, ..., dLdWk - Derivatives of the loss with respect to each
            %                             learnable parameter
            
            % Layer backward function goes here.
        end
    end
end

Назовите слой и задайте суперклассы

Во-первых, дайте слою имя. В первой линии файла класса замените существующее имя myLayer с projectAndReshapeLayer. Затем задайте, чтобы наследовать от обоих nnet.layer.Layer и nnet.layer.Formattable суперклассы.

classdef projectAndRehapeLayer < nnet.layer.Layer & nnet.layer.Formattable
    ...
end

Затем переименуйте myLayer функция конструктора (первая функция в methods разделите) так, чтобы это имело то же имя как слой.

    methods
        function layer = projectAndReshapeLayer()           
            ...
        end

        ...
     end

Сохраните слой

Сохраните файл класса слоя в новом файле с именем projectAndReshapeLayer.m. Имя файла должно совпадать с именем слоя. Чтобы использовать слой, необходимо сохранить файл в текущей папке или в папке на пути MATLAB.

Объявите свойства и настраиваемые параметры

Объявите свойства слоя в properties разделите и объявите настраиваемые параметры путем листинга их в properties (Learnable) раздел.

По умолчанию пользовательские промежуточные слои имеют эти свойства.

СвойствоОписание
NameИмя слоя в виде вектора символов или строкового скаляра. Чтобы включать слой в график слоев, необходимо задать непустое, уникальное имя слоя. Если вы обучаете серийную сеть со слоем и Name установлен в '', затем программное обеспечение автоматически присваивает имя к слою в учебное время.
Description

Однострочное описание слоя в виде вектора символов или строкового скаляра. Это описание появляется, когда слой отображен в Layer массив. Если вы не задаете описание слоя, то программное обеспечение отображает имя класса слоя.

TypeТип слоя в виде вектора символов или строкового скаляра. Значение Type появляется, когда слой отображен в Layer массив. Если вы не задаете тип слоя, то программное обеспечение отображает имя класса слоя.
NumInputsКоличество входных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumInputs к количеству имен в InputNames. Значение по умолчанию равняется 1.
InputNamesВведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumInputs больше 1, затем программное обеспечение автоматически устанавливает InputNames к {'in1',...,'inN'}, где N равно NumInputs. Значением по умолчанию является {'in'}.
NumOutputsКоличество выходных параметров слоя в виде положительного целого числа. Если вы не задаете это значение, то программное обеспечение автоматически устанавливает NumOutputs к количеству имен в OutputNames. Значение по умолчанию равняется 1.
OutputNamesВыведите имена слоя в виде массива ячеек из символьных векторов. Если вы не задаете это значение и NumOutputs больше 1, затем программное обеспечение автоматически устанавливает OutputNames к {'out1',...,'outM'}, где M равно NumOutputs. Значением по умолчанию является {'out'}.

Если слой не имеет никаких других свойств, то можно не использовать properties раздел.

Совет

Если вы создаете слой с несколькими входными параметрами, то необходимо установить любого NumInputs или InputNames свойства в конструкторе слоя. Если вы создаете слой с несколькими выходными параметрами, то необходимо установить любого NumOutputs или OutputNames свойства в конструкторе слоя. Для примера смотрите, Задают Пользовательский Слой Глубокого обучения с Несколькими Входными параметрами.

Проект и изменяется, слой требует дополнительного свойства, которое содержит слой выходной размер. Задайте одно свойство с именем OutputSize в properties раздел.

    properties
        % Output size
        OutputSize
    end

Проект и изменяется, слой имеет два настраиваемых параметра: веса и смещения полностью операции connect. Объявите их настраиваемый параметр в properties (Learnable) разделите и вызовите параметры Weights и Bias, соответственно.


    properties (Learnable)
    % Layer learnable parameters
    % Fully connect weights Weights % Fully
        connect biases Bias end

Создайте функцию конструктора

Создайте функцию, которая создает слой и инициализирует свойства слоя. Задайте любые переменные, требуемые создать слой как входные параметры к функции конструктора.

Проект и изменяется, функция конструктора слоя требует двух входных параметров:

  • Слой вывел размер

  • Количество каналов

  • Имя слоя (дополнительный, с именем по умолчанию '')

В функции конструктора projectAndReshapeLayer, задайте два необходимых входных параметра под названием outputSize и numChannels, и дополнительные аргументы как пары "имя-значение" с именем NameValueArgs. Добавьте комментарий в верхнюю часть функции, которая объясняет синтаксис функции.

        function layer = projectAndReshapeLayer(outputSize,numChannels,NameValueArgs)
            % layer = projectAndReshapeLayer(outputSize,numChannels)
            % creates a projectAndReshapeLayer object that projects and
            % reshapes the input to the specified output size using and
            % specifies the number of input channels.
            %
            % layer = projectAndReshapeLayer(outputSize,numChannels,'Name',name)
            % also specifies the layer name.
            
            ...
        end

Проанализируйте входные параметры

Проанализируйте входные параметры с помощью arguments блок. Перечислите аргументы в том же порядке как синтаксис функций и задайте значения по умолчанию. Затем извлеките значения из NameValueArgs входной параметр.

            % Parse input arguments.
            arguments
                outputSize
                numChannels
                NameValueArgs.Name = ''
            end
            
            name = NameValueArgs.Name;

Инициализируйте свойства слоя

Инициализируйте свойства слоя, включая настраиваемые параметры в функции конструктора. Замените комментарий % Layer constructor function goes here с кодом, который инициализирует свойства слоя.

Установите Name свойство к входному параметру name.

            % Set layer name.
            layer.Name = name;

Дайте слою однострочное описание путем установки Description свойство слоя. Установите описание описывать тип слоя и его размера.

            % Set layer description.
            layer.Description = "Project and reshape layer with output size " + join(string(outputSize));

Задайте тип слоя путем установки Type свойство. Значение Type появляется, когда слой отображен в Layer массив.

            % Set layer type.
            layer.Type = "Project and Reshape";

Установите свойство слоя OutputSize к заданному входному значению.

            % Set output size.
            layer.OutputSize = outputSize;

Проект и изменяется, слой применяется полностью операция connect, чтобы спроектировать вход к пакету изображений. Инициализируйте веса с помощью инициализатора Glorot и инициализируйте смещение массивом нулей. Функции initializeGlorot и initializeZeros присоединены к примеру, Обучают Порождающую соперничающую сеть (GAN) как вспомогательные файлы. Чтобы получить доступ к этим функциям, откройте этот пример как live скрипт. Для получения дополнительной информации об инициализации настраиваемых параметров для операций глубокого обучения, смотрите, Инициализируют Настраиваемые параметры для Функции Модели.

            % Initialize fully connect weights and bias.
            sz = [prod(outputSize) numChannels];
            numOut = prod(outputSize);
            numIn = numChannels;
            layer.Weights = initializeGlorot(sz,numOut,numIn);
            layer.Bias = initializeZeros([prod(outputSize) 1]);

Просмотрите завершенную функцию конструктора.

        function layer = projectAndReshapeLayer(outputSize,numChannels,NameValueArgs)
            % layer = projectAndReshapeLayer(outputSize,numChannels)
            % creates a projectAndReshapeLayer object that projects and
            % reshapes the input to the specified output size using and
            % specifies the number of input channels.
            %
            % layer = projectAndReshapeLayer(outputSize,numChannels,'Name',name)
            % also specifies the layer name.
                                  
            % Parse input arguments.
            arguments
                outputSize
                numChannels
                NameValueArgs.Name = '';
            end
            
            name = NameValueArgs.Name;
            
            % Set layer name.
            layer.Name = name;

            % Set layer description.
            layer.Description = "Project and reshape layer with output size " + join(string(outputSize));
            
            % Set layer type.
            layer.Type = "Project and Reshape";
            
            % Set output size.
            layer.OutputSize = outputSize;
            
            % Initialize fully connect weights and bias.
            sz = [prod(outputSize) numChannels];
            numOut = prod(outputSize);
            numIn = numChannels;
            layer.Weights = initializeGlorot(sz,numOut,numIn);
            layer.Bias = initializeZeros([prod(outputSize) 1]);
        end

С этой функцией конструктора, команда projectAndReshapeLayer([4 4 512],100,'Name','proj'); создает проект, и измените слой с именем 'proj' это проектирует входные массивы с размером 100 к пакету 512 изображений 4 на 4.

Создайте прямые функции

Создайте слой вперед функции, чтобы использовать во время предсказания и учебное время.

Создайте функцию с именем predict это распространяет данные вперед через слой во время предсказания и выводит результат.

Синтаксис для predict [Z1,…,Zm] = predict(layer,X1,…,Xn), где X1,…,Xn n входные параметры слоя и Z1,…,Zm m слой выходные параметры. Значения n и m должен соответствовать NumInputs и NumOutputs свойства слоя.

Совет

Если количество входных параметров к predict может варьироваться, затем использовать varargin вместо X1,…,Xn. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi. Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,Zm. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в predict функция пользовательского слоя, используйте predict функция для dlnetwork. Используя dlnetwork объект predict функция гарантирует, что программное обеспечение использует правильные операции слоя для предсказания.

Поскольку проект и изменяется, слой имеет только один вход и один выход, синтаксис для predict для проекта и изменяются, слоем является Z = predict(layer,X).

По умолчанию слой использует predict как прямая функция в учебное время. Использовать различную прямую функцию в учебное время или сохранить значение потребовали для пользовательской обратной функции, необходимо также создать функцию с именем forward.

Размерности входных параметров зависят от типа данных и выхода связанных слоев:

Вход слояВведите размерРазмерность наблюдения
2D изображенияh-by-w-by-c-by-N, где h, w и c соответствуют высоте, ширине, и количеству каналов изображений, соответственно, и N, является количеством наблюдений.4
3-D изображенияh-by-w-by-d-by-c-by-N, где h, w, d и c соответствуют высоте, ширине, глубине, и количеству каналов 3-D изображений, соответственно, и N, является количеством наблюдений.5
Векторные последовательностиc-by-N-by-S, где c является количеством функций последовательностей, N, является количеством наблюдений, и S является длиной последовательности.2
2D последовательности изображенийh-by-w-by-c-by-N-by-S, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, N, является количеством наблюдений, и S является длиной последовательности.4
3-D последовательности изображенийh-by-w-by-d-by-c-by-N-by-S, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, N, является количеством наблюдений, и S является длиной последовательности.5

Для слоев, которые выводят последовательности, слои могут вывести последовательности любой длины или выходных данных без измерения времени. Обратите внимание на то, что при обучении сети, что выходные последовательности с помощью trainNetwork функция, длины последовательностей ввода и вывода должны соответствовать.

Поскольку пользовательский слой наследовался nnet.layer.Formattable класс, слой получает, отформатировал dlarray объекты с метками, соответствующими выходу предыдущего слоя.

forward функция распространяет данные вперед через слой в учебное время и также выводит значение памяти.

Синтаксис для forward [Z1,…,Zm,memory] = forward(layer,X1,…,Xn), где X1,…,Xn n входные параметры слоя, Z1,…,Zm m слой выходные параметры и memory память о слое.

Совет

Если количество входных параметров к forward может варьироваться, затем использовать varargin вместо X1,…,Xn. В этом случае, varargin массив ячеек входных параметров, где varargin{i} соответствует Xi. Если количество выходных параметров может варьироваться, то используйте varargout вместо Z1,…,Zm. В этом случае, varargout массив ячеек выходных параметров, где varargout{j} соответствует Zj для j = 1, …, NumOutputs и varargout{NumOutputs + 1} соответствует memory.

Совет

Если пользовательский слой имеет dlnetwork объект для настраиваемого параметра, затем в forward функция пользовательского слоя, используйте forward функция dlnetwork объект. Используя dlnetwork объект forward функция гарантирует, что программное обеспечение использует правильные операции слоя для обучения.

Проект и изменяется, операция состоит из трех операции:

  • Применяйтесь полностью операции подключения с learnable весами и смещения.

  • Измените выход к заданному выходному размеру.

  • Повторно пометьте размерности так, чтобы выход имел формат 'SSCB' (пространственный, пространственный, канал, пакет)

Реализуйте эту операцию в predict функция. Проект и изменяется, слой не требует памяти или различной прямой функции для обучения, таким образом, можно удалить forward функция из файла класса. Добавьте комментарий в верхнюю часть функции, которая объясняет синтаксисы функции.

        function Z = predict(layer, X)
            % Forward input data through the layer at prediction time and
            % output the result.
            % 
            % Inputs:
            %         layer - Layer to forward propagate through
            %         X     - Input data, specified as a formatted dlarray
            %                 with a 'C' and optionally a 'B' dimension.
            % Outputs:
            %         Z     - Output of layer forward function returned as 
            %                 a formatted dlarray with format 'SSCB'.

            % Fully connect.
            weights = layer.Weights;
            bias = layer.Bias;
            X = fullyconnect(X,weights,bias);
            
            % Reshape.
            outputSize = layer.OutputSize;
            Z = reshape(X, outputSize(1), outputSize(2), outputSize(3), []);
            
            % Relabel.
            Z = dlarray(Z,'SSCB');
        end

Совет

Если вы предварительно выделяете массивы с помощью функций такой как zeros, затем необходимо гарантировать, что типы данных этих массивов сопоставимы с входными параметрами функции слоя. Чтобы создать массив нулей совпадающего типа данных как другой массив, используйте 'like' опция zeros. Например, чтобы инициализировать массив нулей размера sz с совпадающим типом данных как массив X, используйте Z = zeros(sz,'like',X).

Поскольку predict функционируйте только использует функции та поддержка dlarray объекты, задавая backward функция является дополнительной. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray.

Завершенный слой

Просмотрите завершенный файл класса слоя.

classdef projectAndReshapeLayer < nnet.layer.Layer & nnet.layer.Formattable
    % Example project and reshape layer.

    properties
        % Output size
        OutputSize
    end


    properties (Learnable)
    % Layer learnable parameters
    % Fully connect weights Weights % Fully
        connect biases Bias end
    
    methods
        function layer = projectAndReshapeLayer(outputSize,numChannels,NameValueArgs)
            % layer = projectAndReshapeLayer(outputSize,numChannels)
            % creates a projectAndReshapeLayer object that projects and
            % reshapes the input to the specified output size using and
            % specifies the number of input channels.
            %
            % layer = projectAndReshapeLayer(outputSize,numChannels,'Name',name)
            % also specifies the layer name.
                                  
            % Parse input arguments.
            arguments
                outputSize
                numChannels
                NameValueArgs.Name = '';
            end
            
            name = NameValueArgs.Name;
            
            % Set layer name.
            layer.Name = name;

            % Set layer description.
            layer.Description = "Project and reshape layer with output size " + join(string(outputSize));
            
            % Set layer type.
            layer.Type = "Project and Reshape";
            
            % Set output size.
            layer.OutputSize = outputSize;
            
            % Initialize fully connect weights and bias.
            sz = [prod(outputSize) numChannels];
            numOut = prod(outputSize);
            numIn = numChannels;
            layer.Weights = initializeGlorot(sz,numOut,numIn);
            layer.Bias = initializeZeros([prod(outputSize) 1]);
        end
        
        function Z = predict(layer, X)
            % Forward input data through the layer at prediction time and
            % output the result.
            % 
            % Inputs:
            %         layer - Layer to forward propagate through
            %         X     - Input data, specified as a formatted dlarray
            %                 with a 'C' and optionally a 'B' dimension.
            % Outputs:
            %         Z     - Output of layer forward function returned as 
            %                 a formatted dlarray with format 'SSCB'.

            % Fully connect.
            weights = layer.Weights;
            bias = layer.Bias;
            X = fullyconnect(X,weights,bias);
            
            % Reshape.
            outputSize = layer.OutputSize;
            Z = reshape(X, outputSize(1), outputSize(2), outputSize(3), []);
            
            % Relabel.
            Z = dlarray(Z,'SSCB');
        end
    end
end

Совместимость с GPU

Если слой вперед функции полностью поддерживает dlarray объекты, затем слоем является совместимый графический процессор. В противном случае, чтобы быть совместимым графическим процессором, функции слоя должны поддержать входные параметры и возвратить выходные параметры типа gpuArray (Parallel Computing Toolbox).

Много поддержки встроенных функций MATLAB gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Для списка функций та поддержка dlarray объекты, см. Список Функций с Поддержкой dlarray. Для списка функций, которые выполняются на графическом процессоре, смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox). Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB смотрите, что графический процессор Вычисляет в MATLAB (Parallel Computing Toolbox).

В этом примере функции MATLAB используются в predict вся поддержка dlarray объекты, таким образом, слоем является совместимый графический процессор.

Включайте пользовательский слой в сеть

Задайте следующую архитектуру сети генератора для GAN, который генерирует изображения от 1 1 100 массивами случайных значений:

Эта сеть:

  • Преобразует случайные векторы из размера от 100 до 7 7 128 массивами с помощью проекта, и измените слой.

  • Увеличивает масштаб полученные массивы к 64 64 3 массивами с помощью серии транспонированных слоев свертки и слоев ReLU.

Задайте эту сетевую архитектуру как график слоев и задайте следующие сетевые свойства.

  • Для транспонированных слоев свертки задайте фильтры 5 на 5 с уменьшающимся количеством фильтров для каждого слоя, шага 2 и обрезки выхода на каждом ребре.

  • Поскольку финал транспонировал слой свертки, задайте три фильтра 5 на 5, соответствующие трем каналам RGB сгенерированных изображений и выходному размеру предыдущего слоя.

  • В конце сети включайте tanh слой.

Чтобы спроектировать и изменить шумовой вход, используйте пользовательский слой projectAndReshapeLayer.

filterSize = 5;
numFilters = 64;
numLatentInputs = 100;

projectionSize = [4 4 512];

layersG = [
    featureInputLayer(numLatentInputs,'Normalization','none','Name','in')
    projectAndReshapeLayer(projectionSize,numLatentInputs,'Name','proj');
    transposedConv2dLayer(filterSize,4*numFilters,'Name','tconv1')
    reluLayer('Name','relu1')
    transposedConv2dLayer(filterSize,2*numFilters,'Stride',2,'Cropping','same','Name','tconv2')
    reluLayer('Name','relu2')
    transposedConv2dLayer(filterSize,numFilters,'Stride',2,'Cropping','same','Name','tconv3')
    reluLayer('Name','relu3')
    transposedConv2dLayer(filterSize,3,'Stride',2,'Cropping','same','Name','tconv4')
    tanhLayer('Name','tanh')];

lgraphG = layerGraph(layersG);

Чтобы обучить сеть с пользовательским учебным циклом и включить автоматическое дифференцирование, преобразуйте график слоев в dlnetwork объект.

dlnetG = dlnetwork(lgraphG);

Смотрите также

|

Похожие темы