Вам нужно посмотреть пример Backgroundworker: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx Особенно, как он взаимодействует с уровнем пользовательского интерфейса , Основываясь на вашей публикации, это, похоже, отвечает на ваши вопросы.
Все стандартные слои работают так. Выходной сигнал dim аналогичен фильтру.
Было бы очень сложно что-либо контролировать, если бы это было не так.
Вы когда-нибудь видели основы нейронных сетей, которые учили, как работает полностью связанный уровень?
Каждый нейрон в слое получает все входы, умножает их на веса и суммирует их:
neuron1Out = in1*W11 + in2*W12 + in3*W13 + bias1
neuron2Out = in1*W21 + in2*W22 + in3*W23 + bias2
Это то, что выдает Dense(2)
, когда он получает input_dim=3
.
Весовая матрица имеет форму (3,2)
, одно измерение для входов, другое для выходов, а математическая операция - матричное умножение с входами.
Свертки делают почти то же самое. Разница заключается в том, что он повторяет операцию над многократным приведением результатов для каждого пикселя.
Форма ядра - (kernelXpixels, kernelYpixels, input_channels, output_channels)
, которая является (3,3,200,128)
в вашем примере.
После умножения каждого из 200 входных каналов на каждый из 200 фрагментов весов результаты суммируются в один вывод. Это делается 128 раз, обеспечивая 128 выходных нейронов / каналов.