Exemplo n.º 1
0
        ///<summary>Выполняет прямой проход через кодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Encode(Tensor input)
        {
            var Temp = Layers.Conv2D(input, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);

            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(5);
            }
            Temp = Layers.Conv2D(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(5);
            }
            return(Temp);
        }
Exemplo n.º 2
0
        ///<summary>Выполняет прямой проход через декодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Decode(Tensor input)
        {
            var Temp = input;

            if (this.Depth == DecoderType.Conv5)
            {
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv5_1_Weights, this.Data.Conv5_1_Biases);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.Upsample2D(Temp);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_4_Weights, this.Data.Conv4_4_Biases);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_3_Weights, this.Data.Conv4_3_Biases);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_2_Weights, this.Data.Conv4_2_Biases);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    this.Step(100f / 30f);
                }
            }
            if ((this.Depth == DecoderType.Conv4) || (this.Depth == DecoderType.Conv5))
            {
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.Upsample2D(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }
                    }
                }
            }
            if ((this.Depth == DecoderType.Conv3) || (this.Depth == DecoderType.Conv4) || (this.Depth == DecoderType.Conv5))
            {
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }
                    }
                }
                Temp = Layers.Upsample2D(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }
                    }
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }
                    }
                }
            }
            if ((this.Depth == DecoderType.Conv2) || (this.Depth == DecoderType.Conv3) || (this.Depth == DecoderType.Conv4) || (this.Depth == DecoderType.Conv5))
            {
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }
                    }
                }
                Temp = Layers.Upsample2D(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }
                    }
                }
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }
                    }
                }
            }
            if ((this.Depth == DecoderType.Conv1) || (this.Depth == DecoderType.Conv2) || (this.Depth == DecoderType.Conv3) || (this.Depth == DecoderType.Conv4) || (this.Depth == DecoderType.Conv5))
            {
                Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }

                    case DecoderType.Conv1:
                    {
                        this.Step(100f / 2f);
                        break;
                    }
                    }
                }
                Temp = Layers.ReLU(Temp);
                if (this.Step != null)
                {
                    switch (this.Depth)
                    {
                    case DecoderType.Conv5:
                    {
                        this.Step(100f / 30f);
                        break;
                    }

                    case DecoderType.Conv4:
                    {
                        this.Step(100f / 21f);
                        break;
                    }

                    case DecoderType.Conv3:
                    {
                        this.Step(100f / 12f);
                        break;
                    }

                    case DecoderType.Conv2:
                    {
                        this.Step(100f / 7f);
                        break;
                    }

                    case DecoderType.Conv1:
                    {
                        this.Step(100f / 2f);
                        break;
                    }
                    }
                }
            }
            return(Temp);
        }
Exemplo n.º 3
0
        ///<summary>Выполняет прямой проход через кодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tuple <Tensor, Tensor> Encode(Tensor input)
        {
            var Temp = input;

            Temp = Layers.Conv2D1x1(input, this.Data.Conv0_Weights, this.Data.Conv0_Biases);
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv4_1 = Temp;

            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_2_Weights, this.Data.Conv4_2_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_3_Weights, this.Data.Conv4_3_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_4_Weights, this.Data.Conv4_4_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv5_1_Weights, this.Data.Conv5_1_Biases);
            if (Step != null)
            {
                Step(100f / 30f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv5_1 = Temp;

            if (Step != null)
            {
                Step(100f / 30f);
            }
            return(new Tuple <Tensor, Tensor>(Conv4_1, Conv5_1));
        }
Exemplo n.º 4
0
        ///<summary>Выполняет прямой проход через кодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Encode(Tensor input)
        {
            var Temp = input;

            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.MaxPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 12f * 100f);
            }
            return(Temp);
        }
        ///<summary>Выполняет прямой проход через сеть-трансформер.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Stylize(Tensor input)
        {
            var Temp = Layers.Conv2D(input, this.Data.Conv1_Weights, 1);

            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.Conv1_Shift, this.Data.Conv1_Scale);
            Temp = Layers.ReLU(Temp);
            Temp = Layers.Conv2D(Temp, this.Data.Conv2_Weights, 2);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.Conv2_Shift, this.Data.Conv2_Scale);
            Temp = Layers.ReLU(Temp);
            Temp = Layers.Conv2D(Temp, this.Data.Conv3_Weights, 2);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.Conv3_Shift, this.Data.Conv3_Scale);
            Temp = Layers.ReLU(Temp);
            Temp = Layers.ResBlock(Temp, this.Data.ResBlock1);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.ResBlock(Temp, this.Data.ResBlock2);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.ResBlock(Temp, this.Data.ResBlock3);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.ResBlock(Temp, this.Data.ResBlock4);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.ResBlock(Temp, this.Data.ResBlock5);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv1_Weights, 2);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv1_Shift, this.Data.TConv1_Scale);
            Temp = Layers.ReLU(Temp);
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv2_Weights, 2);
            if (Step != null)
            {
                Step(10);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv2_Shift, this.Data.TConv2_Scale);
            Temp = Layers.ReLU(Temp);
            Temp = Layers.Conv2D(Temp, this.Data.TConv3_Weights, 1);
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv3_Shift, this.Data.TConv3_Scale);
            Temp = Layers.Tanh(Temp);
            return(Temp);
        }
        ///<summary>Выполняет прямой проход через декодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Decode(Tensor Content, Tensor[] Styles)
        {
            var Temp = Layers.StyleDecorator(Content, Styles[3]);

            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.AdaIN(Temp, Styles[2]);
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.AdaIN(Temp, Styles[1]);
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.AdaIN(Temp, Styles[0]);
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            Temp = Layers.Conv2D7x7(Temp, this.Data.Conv_Out_Weights, this.Data.Conv_Out_Biases);
            if (this.Step != null)
            {
                this.Step(1f / 22f * 100f);
            }
            return(Temp);
        }
        ///<summary>Выполняет прямой проход через декодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Decode(Tensor input)
        {
            var Temp = input;

            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (this.Step != null)
            {
                this.Step(100f / 20f);
            }
            return(Temp);
        }
Exemplo n.º 8
0
        ///<summary>Выполняет прямой проход через декодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Decode(Tensor Content, Tensor Style)
        {
            var Temp = Layers.StyleSwap(Content, Style);

            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv3_1_Weights, this.Data.TConv3_1_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv3_1_Shift, this.Data.TConv3_1_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv2_4_Weights, this.Data.TConv2_4_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv2_4_Shift, this.Data.TConv2_4_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv2_3_Weights, this.Data.TConv2_3_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv2_3_Shift, this.Data.TConv2_3_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv2_2_Weights, this.Data.TConv2_2_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv2_2_Shift, this.Data.TConv2_2_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv2_1_Weights, this.Data.TConv2_1_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv2_1_Shift, this.Data.TConv2_1_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv1_4_Weights, this.Data.TConv1_4_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv1_4_Shift, this.Data.TConv1_4_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.Upsample2D(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv1_3_Weights, this.Data.TConv1_3_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv1_3_Shift, this.Data.TConv1_3_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv1_2_Weights, this.Data.TConv1_2_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.InstanceNorm2D(Temp, this.Data.TConv1_2_Shift, this.Data.TConv1_2_Scale);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.ConvTranspose2D(Temp, this.Data.TConv1_1_Weights, this.Data.TConv1_1_Biases, 1);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            Temp = Layers.Sigmoid(Temp);
            if (this.Step != null)
            {
                this.Step(1f / 29f * 100f);
            }
            return(Temp);
        }
        ///<summary>Выполняет прямой проход через кодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor Encode(Tensor input)
        {
            var Temp = input;

            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                //this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            return(Temp);
        }
        ///<summary>Выполняет прямой проход через кодирующую нейросеть.</summary>
        ///<param name="input">Входные данные.</param>
        public Tensor[] EncodeStyle(Tensor input)
        {
            var Temp = input;

            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_1_Weights, this.Data.Conv1_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv1 = Temp;

            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv1_2_Weights, this.Data.Conv1_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_1_Weights, this.Data.Conv2_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv2 = Temp;

            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv2_2_Weights, this.Data.Conv2_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                //this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_1_Weights, this.Data.Conv3_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv3 = Temp;

            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_2_Weights, this.Data.Conv3_2_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_3_Weights, this.Data.Conv3_3_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv3_4_Weights, this.Data.Conv3_4_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.AvgPool2D(Temp);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.Conv2D3x3(Temp, this.Data.Conv4_1_Weights, this.Data.Conv4_1_Biases);
            if (this.Step != null)
            {
                this.Step(5f);
            }
            Temp = Layers.ReLU(Temp);
            var Conv4 = Temp;

            if (this.Step != null)
            {
                this.Step(5f);
            }
            return(new Tensor[4] {
                Conv1, Conv2, Conv3, Conv4
            });
        }