model.forward
просто вызывает операции пересылки, как вы упомянули, но __call__
делает немного больше.
Если вы покопаетесь в коде класса класса nn.Module
, вы увидите, что __call__
в конечном счете вызывает переадресацию, но внутренне обрабатывает перехватчики вперед или назад и управляет некоторыми состояниями, которые позволяет pytorch. При вызове простой модели, такой как просто MLP, она может и не понадобиться, но более сложные модели, такие как слои спектральной нормализации, имеют зацепки, и поэтому вам следует использовать сигнатуру model(.)
как можно чаще, если вы явно не хотите вызывать model.forward
[ 1110]
Также см. Вызов функции forward без .forward ()
В этом случае, однако, разница может быть из-за некоторого выпадающего слоя, вам следует вызвать vgg.eval()
для убедитесь, что вся стохастичность в сети отключена, прежде чем сравнивать результаты.
Мы сделали значительную работу с DSLs и имеем много их для в доме и основанном на клиенте использовании консультанта, хотя это не имеет меня, кто сделал большую часть работы с ними. После того как Вы сгладили моделирование (никакой маленький подвиг), я сказал бы, что это большие инструменты.
Я не могу указать на Вас ни на какие проекты с открытым исходным кодом unfortuanetly, и я добавлю, что инвестиции в получение не тривиального DSL и выполнение с являются довольно большими, однако если Вы получаете их прямо тогда, повышение производительности является впечатляющим.
редактирование - после опыта нескольких лет я делаю следующие наблюдения:
Я - определенно серьезный берущий. Ivé недавно сделал dsl для моделирования orderprocesses для orderingsystem. Мы используем windowsservice, который это подключает к различным веб-сервисам, на основе которого processtatus определенная строка имеет и затем изменяет состояние на основе результата (Затем, Ошибка, Отказ). Это было очень трудоемким для редактирования той таблицы базы данных вручную, таким образом, я сделал язык и генераторы для кода SQL.
Я должен проверить, разрешают ли мне отправить какой-либо код из проекта, но я отправляю структуру DB, таким образом, можно понять, почему это твердо, действительно редактируют это вручную. Я должен вставить данные для приблизительно. 10 orderprocesses с 5-20 шагами каждый с действиями и всем (ProcessActionId является ссылкой на веб-сервис).
CREATE TABLE [dbo].[OrderProcessStep](
[OrderProcessCode] [int] NOT NULL,
[PreviousProcessStatusCode] [int] NOT NULL,
[NextProcessStatusCode] [int] NULL,
[DenialProcessStatusCode] [int] NULL,
[ErrorProcessStatusCode] [int] NULL,
[ProcessActionId] [int] NULL,
[StepComment] [varchar](500) NOT NULL,
[SecondsToNext] [int] NULL,
[SecondsToError] [int] NULL,
[SecondsToDenial] [int] NULL,
CONSTRAINT [PK_OrderProcess] PRIMARY KEY CLUSTERED
(
[OrderProcessCode] ASC,
[PreviousProcessStatusCode] ASC
)
В дополнение к вышесказанному, инструмент NORMA для объектно-ролевого моделирования построен на инструментах DSL. Это очень сложный пример того, что с ними можно сделать, и демонстрирующий использование преобразований XML для преобразования модели и генерации кода.
Я рассмотрел использование инструментария Visual Studio DSL. В конце концов, я обнаружил, что эти инструменты далеко не ограничивают возможности. To require a GUI, without any ability to easily describe an underlying textual grammar, just seems inadequate to me. I require the ability to easily use the DSL without a GUI.
Oslo seems to be going in a very strange direction, storing all metadata for the DSL in a SQL DB. That just seems extraneous to me, and certainly can slow things down, especially if you want fast IDE integration. Admittedly I have not looked deeply into it, so it may be better than my impression of it.
As an aside, I recently implemented a DSL using Antlr. You can find my post as a response to a question on SO about it here