Если вы создаете пользовательский слой глубокого обучения, то можете использовать checkLayer функция, чтобы проверить, что слой действителен. Функция проверяет слои на валидность, совместимость с GPU, правильно определенные градиенты и совместимость генерации кода. Чтобы проверить, что слой действителен, выполните следующую команду:
checkLayer(layer,validInputSize,'ObservationDimension',dim)
layer является образцом слоя, validInputSize - вектор или массив ячеек, задающий допустимые входные размеры слоя, и dim задает размерность наблюдений во входных данных слоя. Для больших размеров входного сигнала проверки градиента выполняются дольше. Чтобы ускорить тесты, укажите меньший допустимый размер входа.Проверьте валидность пользовательского слоя preluLayer.
Задайте пользовательский слой PReLU. Чтобы создать этот слой, сохраните файл preluLayer.m в текущей папке.
Создайте образец слоя и проверьте, что он действителен checkLayer. Установите допустимый размер входного сигнала, равный типовому размеру единственного входа наблюдения для слоя. Для одного входа слой ожидает наблюдения размера h-на-w-на-c, где h, w и c являются высотой, шириной и количеством каналов предыдущего выходного слоя, соответственно.
Задайте validInputSize как типовой размер массива входа.
layer = preluLayer(20,'prelu');
validInputSize = [5 5 20];
checkLayer(layer,validInputSize)Skipping multi-observation tests. To enable tests with multiple observations, specify the 'ObservationDimension' option. For 2-D image data, set 'ObservationDimension' to 4. For 3-D image data, set 'ObservationDimension' to 5. For sequence data, set 'ObservationDimension' to 2. Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options. Running nnet.checklayer.TestLayerWithoutBackward ......... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 9 Passed, 0 Failed, 0 Incomplete, 13 Skipped. Time elapsed: 0.12426 seconds.
Результаты показывают количество пройденных, неудачных и пропущенных тестов. Если вы не задаете 'ObservationsDimension' опция, или не имеет графический процессор, тогда функция пропускает соответствующие тесты.
Проверяйте несколько наблюдений
Для входных входов нескольких наблюдений слой ожидает массив наблюдений размера h-на-w-на-c-на-N, где h, w и c - высота, ширина и количество каналов, соответственно, и N - количество наблюдений.
Чтобы проверить валидность слоя для нескольких наблюдений, задайте типичный размер наблюдения и установите 'ObservationDimension' по 4.
layer = preluLayer(20,'prelu'); validInputSize = [5 5 20]; checkLayer(layer,validInputSize,'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options. Running nnet.checklayer.TestLayerWithoutBackward .......... ... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 13 Passed, 0 Failed, 0 Incomplete, 9 Skipped. Time elapsed: 0.047134 seconds.
В этом случае функция не обнаруживает никаких проблем со слоем.
checkLayer функция проверяет валидность пользовательского слоя путем выполнения ряда тестов.
checkLayer функция использует эти тесты, чтобы проверить валидность пользовательских промежуточных слоев (слоев типа nnet.layer.Layer).
| Тест | Описание |
|---|---|
functionSyntaxesAreCorrect | Синтаксисы функций слоя заданы правильно. |
predictDoesNotError | predict не ошибается. |
forwardDoesNotError | Когда задано, |
forwardPredictAreConsistentInSize | Когда |
backwardDoesNotError | Когда задано, backward не ошибается. |
backwardIsConsistentInSize | Когда
|
predictIsConsistentInType | Выходные выходы |
forwardIsConsistentInType | Когда |
backwardIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backward задан градиент, вычисленный в backward согласуются с числовыми градиентами. |
backwardPropagationDoesNotError | Когда backward не задан, производные могут быть вычислены с помощью автоматической дифференциации. |
codegenPragmaDefinedInClassDef | Прагма- "%#codegen" для генерации кода указано в файле класса. |
checkForSupportedLayerPropertiesForCodegen | Свойства слоя поддерживают генерацию кода. |
predictIsValidForCodeGeneration | predict действителен для генерации кода. |
Тесты predictIsConsistentInType, forwardIsConsistentInType, и backwardIsConsistentInType также проверьте совместимость с GPU. Чтобы выполнить функции слоя на графическом процессоре, функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.
checkLayer функция использует эти тесты, чтобы проверить валидность пользовательских выходных слоев (слоев типа nnet.layer.ClassificationLayer или nnet.layer.RegressionLayer).
| Тест | Описание |
|---|---|
forwardLossDoesNotError | forwardLoss не ошибается. |
backwardLossDoesNotError | backwardLoss не ошибается. |
forwardLossIsScalar | Область выхода forwardLoss скаляром. |
backwardLossIsConsistentInSize | Когда backwardLoss задан, выход backwardLoss согласуется в размере: dLdY - тот же размер, что и предсказания Y. |
forwardLossIsConsistentInType | Область выхода |
backwardLossIsConsistentInType | Когда |
gradientsAreNumericallyCorrect | Когда backwardLoss задан градиент, вычисленный в backwardLoss численно верны. |
backwardPropagationDoesNotError | Когда backwardLoss не задан, производные могут быть вычислены с помощью автоматической дифференциации. |
The forwardLossIsConsistentInType и backwardLossIsConsistentInType тесты также проверяют совместимость с GPU. Чтобы выполнить функции слоя на графическом процессоре, функции должны поддерживать входы и выходы типа gpuArray с базовым типом данных single.
Чтобы проверить валидность слоя, checkLayer функция генерирует данные в зависимости от типа слоя:
| Тип слоя | Описание сгенерированных данных |
|---|---|
| Промежуточное звено | Значения в области значений [-1,1] |
| Выход регрессии | Предсказания и цели со значениями в области значений [-1,1] |
| Результат классификации | Предсказания со значениями в области значений [0,1]. Если вы задаете Если вы не задаете |
Чтобы проверить наличие нескольких наблюдений, задайте размерность наблюдения с помощью 'ObservationDimension' Пара "имя-значение". Если вы задаете размерность наблюдения, то checkLayer функция проверяет, что функции слоя действительны, используя сгенерированные данные с мини-пакетами размера 1 и 2. Если вы не задаете эту пару "имя-значение", то функция пропускает тесты, которые проверяют, что функции слоя действительны для нескольких наблюдений.
Если тест не пройден, когда вы используете checkLayer, затем функция обеспечивает тестовую диагностику и диагностику в среде. Тестовая диагностика выделяет все проблемы, обнаруженные с слоем. В диагностике в среде представлена более подробная информация.
Тестовое functionSyntaxesAreCorrect проверяет, что функции слоя имеют правильно определенные синтаксисы.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect number of input arguments for 'predict' in Layer. | Синтаксис predict функция не соответствует количеству входов слоя. | Задайте правильное количество входа и выходных аргументов в Синтаксис для Совет Если количество входов в Совет Если у пользовательского слоя есть |
Incorrect number of output arguments for 'predict' in Layer | Синтаксис predict функция не соответствует количеству выходов слоя. | |
Incorrect number of input arguments for 'forward' in Layer | Синтаксис необязательного forward функция не соответствует количеству входов слоя. | Задайте правильное количество входа и выходных аргументов в Синтаксис для Совет Если количество входов в Совет Если у пользовательского слоя есть |
Incorrect number of output arguments for 'forward' in Layer | Синтаксис необязательного forward функция не соответствует количеству выходов слоя. | |
Incorrect number of input arguments for 'backward' in Layer | Синтаксис необязательного backward функция не соответствует количеству входов и выходов слоя. | Задайте правильное количество входа и выходных аргументов в Синтаксис для
Для выходов Совет Если количество входов в Если количество выходов может варьироваться, используйте Совет Если функции слоя forward поддержки |
Incorrect number of output arguments for 'backward' in Layer | Синтаксис необязательного backward функция не соответствует количеству выходов слоя. |
Для слоев с несколькими входами или выходами необходимо задать значения свойств слоя NumInputs (или в качестве альтернативы InputNames) и NumOutputs (или в качестве альтернативы OutputNames) в функции конструктора слоев, соответственно.
checkLayer функция проверяет, что функции слоя действительны для одиночных и нескольких наблюдений. Чтобы проверить наличие нескольких наблюдений, задайте размерность наблюдения с помощью 'ObservationDimension' Пара "имя-значение". Если вы задаете размерность наблюдения, то checkLayer функция проверяет, что функции слоя действительны, используя сгенерированные данные с мини-пакетами размера 1 и 2. Если вы не задаете эту пару "имя-значение", то функция пропускает тесты, которые проверяют, что функции слоя действительны для нескольких наблюдений.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Skipping multi-observation tests. To enable checks with multiple observations, specify the 'ObservationDimension' parameter in checkLayer. | Если вы не задаете 'ObservationDimension' параметр в checkLayer, затем функция пропускает тесты, которые проверяют данные с несколькими наблюдениями. | Используйте команду Для получения дополнительной информации смотрите Слой Входа Sizes. |
Эти тесты проверяют, что слои не ошибаются при передаче входных данных допустимого размера.
Промежуточные слои. Тесты predictDoesNotError, forwardDoesNotError, и backwardDoesNotError проверяйте, что функции слоя не ошибаются при передаче входов допустимого размера. Если вы задаете размерность наблюдения, то функция проверяет слой как на одно наблюдение, так и на несколько наблюдений.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
The function 'predict' threw an error: | The predict ошибки функции при передаче данных о размере validInputSize. | Устраните ошибку, описанную в Совет Если функции слоя forward поддержки |
The function 'forward' threw an error: | Необязательный forward ошибки функции при передаче данных о размере validInputSize. | |
The function 'backward' threw an error: | Необязательный backward ошибки функции при прохождении выхода predict. |
Выходные слои. Тесты forwardLossDoesNotError и backwardLossDoesNotError проверяйте, что функции слоя не ошибаются при передаче входов допустимого размера. Если вы задаете размерность наблюдения, то функция проверяет слой как на одно наблюдение, так и на несколько наблюдений.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
The function 'forwardLoss' threw an error: | The forwardLoss ошибки функции при передаче данных о размере validInputSize. | Устраните ошибку, описанную в Совет Если на |
The function 'backwardLoss' threw an error: | Необязательный backwardLoss ошибки функции при передаче данных о размере validInputSize. |
Эти тесты проверяют, что выходы функции слоя согласованы в размере.
Промежуточные слои. Тестовое backwardIsConsistentInSize проверяет, что backward функция выводит производные от правильного размера.
Синтаксис для backward является [dLdX1,…,dLdXn,dLdW1,…,dLdWk] = backward(layer,X1,…,Xn,Z1,…,Zm,dLdZ1,…,dLdZm,memory), где:
X1,…,Xn являются ли n входы слоя
Z1,…,Zm являются ли m выходы передних функций слоя
dLdZ1,…,dLdZm являются ли градиенты назад распространены от следующего слоя
memory - выход памяти forward если forward определяется, в противном случае memory является [].
Для выходов dLdX1,…,dLdXn являются производными от потерь относительно входов слоя и dLdW1,…,dLdWk являются производными от потерь по отношению к k настраиваемые параметры. Чтобы уменьшить использование памяти путем предотвращения сохранения неиспользованных переменных между прямым и обратным проходом, замените соответствующие входные параметры на ~.
Совет
Если количество входов в backward может варьироваться, затем использовать varargin вместо входных параметров после layer. В этом случае varargin - массив ячеек входных входов, где varargin{i} соответствует Xi для i=1, …, NumInputs, varargin{NumInputs+j} и varargin{NumInputs+NumOutputs+j} соответствуют Zj и dLdZj, соответственно, для j=1, …, NumOutputs, и varargin{end} соответствует memory.
Если количество выходов может варьироваться, используйте varargout вместо выходных аргументов. В этом случае varargout - массив ячеек выходов, где varargout{i} соответствует dLdXi для i=1, …, NumInputs и varargout{NumInputs+t} соответствует dLdWt для t=1, …, k, где k количество настраиваемых параметров.
Производные dLdX1, …, dLdXn должен быть того же размера, что и соответствующие входы слоя, и dLdW1,…,dLdWk должен быть таким же размером, как и соответствующие настраиваемые параметры. Размеры должны быть одинаковыми для входных данных с одним и несколькими наблюдениями.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect size of 'dLdX' for 'backward'. | Производные потерь относительно входов слоя должны быть такого же размера, как и соответствующие входы слоя. | Верните производные |
Incorrect size of the derivative of the loss with respect to the input 'in1' for 'backward' | ||
The size of 'Z' returned from 'forward' must be the same as for 'predict'. | Выходные выходы predict должен быть такого же размера, как и соответствующие выходы forward. | Верните выходы |
Incorrect size of the derivative of the loss with respect to 'W' for 'backward'. | Производные потерь относительно настраиваемых параметров должны быть такими же размерами, как и соответствующие настраиваемые параметры. | Верните производные |
Совет
Если функции слоя forward поддержки dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вам не нужно задавать backward функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Выходные слои. Тестовое forwardLossIsScalar проверяет, что выходы forwardLoss функция скаляром. Когда backwardLoss задана функция, тестовое backwardLossIsConsistentInSize проверяет, что выходы forwardLoss и backwardLoss имеют правильный размер.
Синтаксис для forwardLoss является loss = forwardLoss(layer, Y, T). Область входа Y соответствует предсказаниям, сделанным сетью. Эти предсказания являются выходами предыдущего слоя. Область входа T соответствует учебным целям. Область выхода loss это потеря между Y и T согласно заданной функции потерь. Область выхода loss должно быть скалярным.
Если на forwardLoss функция поддерживает dlarray объекты, затем программное обеспечение автоматически определяет функцию обратных потерь, и вам не нужно задавать backwardLoss функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Синтаксис для backwardLoss является dLdY = backwardLoss(layer, Y, T). Область входа Y содержит предсказания, сделанные сетью и T содержит цели обучения. Область выхода dLdY является производной от потерь относительно предсказаний Y. Область выхода dLdY должен быть такого же размера, как и входной параметр слоя Y.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect size of 'loss' for 'forwardLoss'. | Область выхода loss от forwardLoss должно быть скаляром. | Верните выход |
Incorrect size of the derivative of loss 'dLdY' for 'backwardLoss'. | Когда backwardLoss задано, что производные потерь по отношению к входу слоя должны быть такого же размера, как и входные параметры слоя. | Возврат производной Если на |
Эти тесты проверяют, что выходы функции слоя согласованы по типу и что функции уровня совместимы с графическим процессором.
Если функции слоя forward полностью поддерживают dlarray объекты, тогда слой совместим с графическим процессором. В противном случае, чтобы быть совместимым с графический процессор, функции слоя должны поддерживать входы и выходные выходы возврата типа gpuArray (Parallel Computing Toolbox).
Многие MATLAB® поддержка встроенных функций gpuArray (Parallel Computing Toolbox) и dlarray входные параметры. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray. Список функций, которые выполняются на графическом процессоре, см. в разделе Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox). Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Для получения дополнительной информации о работе с графическими процессорами в MATLAB, смотрите GPU Computing в MATLAB (Parallel Computing Toolbox).
Промежуточные слои. Тесты predictIsConsistentInType, forwardIsConsistentInType, и backwardIsConsistentInType проверяйте, что функции слоя выводят переменные правильного типа данных. Тесты проверяют, что функции слоя возвращают согласованные типы данных при заданных входах типов данных single, double, и gpuArray с базовыми типами single или double.
Совет
Если вы предварительно распределяете массивы, используя такие функции, как zerosЗатем необходимо убедиться, что типы данных этих массивов соответствуют входам функции слоя. Чтобы создать массив нулей того совпадающий тип данных, что и другой массив, используйте 'like' опция zeros. Для примера инициализировать массив нулей размера sz с тем совпадающим типом данных, что и массив X, использовать Z = zeros(sz,'like',X).
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect type of 'Z' for 'predict'. | Типы выходов Z1,…,Zm от predict функция должна соответствовать входам X1,…,Xn. | Верните выходы |
Incorrect type of output 'out1' for 'predict'. | ||
Incorrect type of 'Z' for 'forward'. | Типы выходов Z1,…,Zm необязательного forward функция должна соответствовать входам X1,…,Xn. | |
Incorrect type of output 'out1' for 'forward'. | ||
Incorrect type of 'dLdX' for 'backward'. | Типы производных dLdX1,…,dLdXn необязательного backward функция должна соответствовать входам X1,…,Xn. | Верните производные |
Incorrect type of the derivative of the loss with respect to the input 'in1' for 'backward'. | ||
Incorrect type of the derivative of loss with respect to 'W' for 'backward'. | Тип производной от потери настраиваемых параметров должен соответствовать соответствующим настраиваемым параметрам. | Для каждого настраиваемого параметра верните производную с тем же типом, что и соответствующий настраиваемый параметр. |
Совет
Если функции слоя forward поддержки dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вам не нужно задавать backward функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Выходные слои. Тесты forwardLossIsConsistentInType и backwardLossIsConsistentInType проверяйте, что функции слоя выводят переменные правильного типа данных. Тесты проверяют, чтобы слои возвращали согласованные типы данных при заданных входах типов данных single, double, и gpuArray с базовыми типами single или double.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Incorrect type of 'loss' for 'forwardLoss'. | Тип выхода loss от forwardLoss функция должна соответствовать входу Y. | Возврат |
Incorrect type of the derivative of loss 'dLdY' for 'backwardLoss'. | Тип выхода dLdY необязательного backwardLoss функция должна соответствовать входу Y. | Возврат |
Совет
Если на forwardLoss функция поддерживает dlarray объекты, затем программное обеспечение автоматически определяет функцию обратных потерь, и вам не нужно задавать backwardLoss функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Тестовое gradientsAreNumericallyCorrect проверяет, что градиенты, вычисленные функциями слоя, численно верны. Тестовое backwardPropagationDoesNotError проверяет, что производные могут быть вычислены с помощью автоматической дифференциации.
Промежуточные слои. Когда необязательный backward функция не задана, тест backwardPropagationDoesNotError проверяет, что производные могут быть вычислены с помощью автоматической дифференциации. Когда необязательный backward задана функция, тестовое gradientsAreNumericallyCorrect проверяет, что градиенты, вычисленные в backward численно верны.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Expected a dlarray with no dimension labels, but instead found labels. | Когда необязательный backward функция не задана, передние функции слоя должны выводить dlarray объекты без меток размерностей. | Убедитесь, что любой dlarray объекты, созданные в передних функциях слоя, не содержат меток размерностей. |
Unable to backward propagate through the layer. Check that the 'forward' function fully supports automatic differentiation. Alternatively, implement the 'backward' function manually. | Одно или несколько из следующих:
| Проверяйте, что передние функции поддерживают Проверяйте, что производные входы Кроме того, задайте пользовательскую обратную функцию путем создания функции с именем |
Unable to backward propagate through the layer. Check that the 'predict' function fully supports automatic differentiation. Alternatively, implement the 'backward' function manually. | ||
The derivative 'dLdX' for 'backward' is inconsistent with the numerical gradient. | Одно или несколько из следующих:
| Если функции слоя forward поддержки Проверяйте, что производные в Если производные вычислены правильно, то в Если абсолютные и относительные погрешности находятся в пределах допустимого запаса от допуска, то можно игнорировать эту тестовую диагностику. |
The derivative of the loss with respect to the input 'in1' for 'backward' is inconsistent with the numerical gradient. | ||
The derivative of loss with respect to 'W' for 'backward' is inconsistent with the numerical gradient. |
Совет
Если функции слоя forward поддержки dlarray объекты, затем программное обеспечение автоматически определяет обратную функцию, и вам не нужно задавать backward функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Выходные слои. Когда необязательный backwardLoss функция не задана, тест backwardPropagationDoesNotError проверяет, что производные могут быть вычислены с помощью автоматической дифференциации. Когда необязательный backwardLoss задана функция, тестовое gradientsAreNumericallyCorrect проверяет, что градиенты, вычисленные в backwardLoss численно верны.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Expected a dlarray with no dimension labels, but instead found labels | Когда необязательный backwardLoss функция не задана, forwardLoss функция должна выводить dlarray объекты без меток размерностей. | Убедитесь, что любой dlarray объекты, созданные в forwardLoss функция не содержит меток размерностей. |
Unable to backward propagate through the layer. Check that the 'forwardLoss' function fully supports automatic differentiation. Alternatively, implement the 'backwardLoss' function manually | Одно или несколько из следующих:
| Проверяйте, что Проверяйте, что производные входы Кроме того, задайте пользовательскую функцию обратных потерь путем создания функции с именем |
The derivative 'dLdY' for 'backwardLoss' is inconsistent with the numerical gradient. | Одно или несколько из следующих:
| Проверяйте, что производные в Если производные вычислены правильно, то в Если абсолютные и относительные погрешности находятся в пределах допустимого запаса от допуска, то можно игнорировать эту тестовую диагностику. |
Совет
Если на forwardLoss функция поддерживает dlarray объекты, затем программное обеспечение автоматически определяет функцию обратных потерь, и вам не нужно задавать backwardLoss функция. Список функций, поддерживающих dlarray объекты, см. Список функций с поддержкой dlarray.
Если вы задаете 'CheckCodegenCompatibility' опция для true, затем checkLayer функция проверяет слой на совместимость генерации кода.
Тестовое codegenPragmaDefinedInClassDef проверяет, содержит ли определение слоя прагму генерации кода %#codegen. Тестовое checkForSupportedLayerPropertiesForCodegen проверяет, что свойства слоя поддерживают генерацию кода. Тестовое predictIsValidForCodegeneration проверяет, что выходы predict являются последовательными по размерности и размеру партии.
Генерация кода поддерживает промежуточные слои только с 2-D входом изображения.
| Тестовая диагностика | Описание | Возможное решение |
|---|---|---|
Specify '%#codegen' in the class definition of custom layer | Определение слоя не включает прагму "%#codegen" для генерации кода. |
Добавьте |
Nonscalar layer properties must be type single or double or character array for custom layer | Слой содержит некалярные свойства другого типа, кроме одинарного, двойного или символьного массива. | Преобразуйте некалярные свойства в использование представления типа single, double или символьный массив. Например, преобразуйте категориальный массив в массив целых чисел типа |
Scalar layer properties must be numeric, logical, or string for custom layer | Слой содержит скалярные свойства типа, отличного от числового, логического или строкового. | Преобразуйте скалярные свойства в использование числового представления или представления типа логического или строкового. Например, преобразуйте категориальный скаляр в целое число типа |
For code generation, 'Z' must have the same number of dimensions as the layer input. | Количество размерностей из выхода | В |
For code generation, 'Z' must have the same batch size as the layer input. | Размер пакета выхода | В |