Список форумов neuroproject.ru neuroproject.ru
Форум сайта компании НейроПроект
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Sigmoid и BipolarSigmoid

 
Начать новую тему   Ответить на тему    Список форумов neuroproject.ru -> Нейронные сети
Предыдущая тема :: Следующая тема  
Автор Сообщение
skuvv
Новый посетитель
Новый посетитель


Зарегистрирован: 17 Июн 2011
Сообщения: 1

СообщениеДобавлено: Пт Июн 17, 2011 5:45 pm    Заголовок сообщения: Sigmoid и BipolarSigmoid Ответить с цитатой

Добрый день.
Разбираюсь в алгоритмах нейросетей, подскажите в чем разница в алгоритме между обычным и биполярным сигмоидом?
Обычный сигмоид работает нормально, а я когда меняю входные/выходные данные на биполярные + меняю активаторные фунции и их производные, то результат всегда некорректный...
Код на c#:

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XOR_simple
{
    class Program
    {
        static double stepness = 2;
        static Random r = new Random();
        static Type type = Type.SigmoidSymmetric;
        static void Main(string[] args)
        {
            Console.WriteLine("Start");

            //Init
            double Input1 = 0;
            double Input2 = 0;

            double Hidden1Out = 0;
            double Hidden2Out = 0;
            double Hidden3Out = 0;
            double Hidden4Out = 0;

            double Output1 = 0;

            double Input11W = GetRandom();
            double Input12W = GetRandom();
            double Input13W = GetRandom();
            double Input14W = GetRandom();
            double Input21W = GetRandom();
            double Input22W = GetRandom();
            double Input23W = GetRandom();
            double Input24W = GetRandom();



            double Hidden1W = GetRandom();
            double Hidden2W = GetRandom();
            double Hidden3W = GetRandom();
            double Hidden4W = GetRandom();

            double[][] input = new double[4][];
            double[][] output = new double[4][];
            if (type == Type.SigmoidSymmetric)
            {
                input[0] = new double[] { -1, -1 };
                input[1] = new double[] { -1, 1 };
                input[2] = new double[] { 1, -1 };
                input[3] = new double[] { 1, 1 };


                output[0] = new double[] { -1 };
                output[1] = new double[] { 1 };
                output[2] = new double[] { 1 };
                output[3] = new double[] { -1 };
            }
            else if (type == Type.Sigmoid)
            {
                input[0] = new double[] { 0, 0 };
                input[1] = new double[] { 0, 1 };
                input[2] = new double[] { 1, 0 };
                input[3] = new double[] { 1, 1 };


                output[0] = new double[] { 0 };
                output[1] = new double[] { 1 };
                output[2] = new double[] { 1 };
                output[3] = new double[] { 0 };
            }

            for (int i = 0; i < 1000; i++)
            {
                double cur_error = 0;
                for (int j = 0; j < output.Count(); j++)
                {
                    Input1 = input[j][0];
                    Input2 = input[j][1];

                    //ForwardPropogate
                    double[] hiddenValues = new double[4];
                    hiddenValues[0] = Input11W * Input1 + Input21W * Input2;
                    hiddenValues[1] = Input12W * Input1 + Input22W * Input2;
                    hiddenValues[2] = Input13W * Input1 + Input23W * Input2;
                    hiddenValues[3] = Input14W * Input1 + Input24W * Input2;

                    Hidden1Out = Function(hiddenValues[0]);
                    Hidden2Out = Function(hiddenValues[1]);
                    Hidden3Out = Function(hiddenValues[2]);
                    Hidden4Out = Function(hiddenValues[3]);

                    double sum = Hidden1W * Hidden1Out + Hidden2W * Hidden2Out + Hidden3W * Hidden3Out + Hidden4W * Hidden4Out;
                    Output1 = Function(sum);
                    //BackPropogate

                    double error = (output[j][0] - Output1);
                    cur_error += error * error / 4;
                    double sigmaOut = -1 * Derivation(Output1) * error;
                    double sigmaHidden1 = Derivation(Hidden1Out) * sigmaOut * Hidden1W;
                    double sigmaHidden2 = Derivation(Hidden2Out) * sigmaOut * Hidden2W;
                    double sigmaHidden3 = Derivation(Hidden3Out) * sigmaOut * Hidden3W;
                    double sigmaHidden4 = Derivation(Hidden4Out) * sigmaOut * Hidden4W;

                    double koef = -0.7;  //-1*LearnRate
                    Hidden1W += koef * sigmaOut * Hidden1Out;
                    Hidden2W += koef * sigmaOut * Hidden2Out;
                    Hidden3W += koef * sigmaOut * Hidden3Out;
                    Hidden4W += koef * sigmaOut * Hidden4Out;

                    Input11W += koef * sigmaHidden1 * Input1;
                    Input12W += koef * sigmaHidden2 * Input1;
                    Input13W += koef * sigmaHidden3 * Input1;
                    Input14W += koef * sigmaHidden4 * Input1;
                    Input21W += koef * sigmaHidden1 * Input2;
                    Input22W += koef * sigmaHidden2 * Input2;
                    Input23W += koef * sigmaHidden3 * Input2;
                    Input24W += koef * sigmaHidden4 * Input2;

                }
                Console.WriteLine("i: " + i + " error: " + cur_error);
            }
           
            Console.WriteLine("Test");
            for (int j = 0; j < output.Count(); j++)
            {
                Input1 = input[j][0];
                Input2 = input[j][1];
                double[] hiddenValues = new double[4];
                hiddenValues[0] = Input11W * Input1 + Input21W * Input2;
                hiddenValues[1] = Input12W * Input1 + Input22W * Input2;
                hiddenValues[2] = Input13W * Input1 + Input23W * Input2;
                hiddenValues[3] = Input14W * Input1 + Input24W * Input2;
                Hidden1Out = Function(hiddenValues[0]);
                Hidden2Out = Function(hiddenValues[1]);
                Hidden3Out = Function(hiddenValues[2]);
                Hidden4Out = Function(hiddenValues[3]);

                double sum = Hidden1W * Hidden1Out + Hidden2W * Hidden2Out + Hidden3W * Hidden3Out + Hidden4W * Hidden4Out;
                Output1 = Function(sum);
                Console.WriteLine("{"+Input1+","+Input2+"} real: "+output[j][0]+" val: "+Output1);
            }


            Console.WriteLine("Finish");
            Console.ReadLine();
        }


        static double GetRandom()
        {
            if (type == Type.SigmoidSymmetric)
                return (2 * r.NextDouble() - 1);
            else return r.NextDouble();
        }
        static double Function(double value)
        {
            double result = 0;
            //result = Math.Tanh(value);
            if (type==Type.SigmoidSymmetric)
            result = 2 / (1 + Math.Exp(-2 * stepness * value)) - 1;
            else if (type == Type.Sigmoid)
                result = 1 / (1 + Math.Exp(-2 * stepness * value));
            return result;
        }
        static double Derivation(double y)
        {
            double result = 0;
            //result = 1 /Math.Pow( Math.Cosh(y),2);
            if (type == Type.SigmoidSymmetric)
            result = stepness * (1 - (y * y));
            else if (type == Type.Sigmoid)
                result = 2 * stepness * y * (1 - y);
            return result;
        }

        enum Type
        {
            Sigmoid,
            SigmoidSymmetric
        }
    }
}

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dedasus
Участник форума
Участник форума


Зарегистрирован: 27 Ноя 2018
Сообщения: 70
Откуда: Москва

СообщениеДобавлено: Чт Ноя 29, 2018 8:07 pm    Заголовок сообщения: Ответить с цитатой

кончает порно бондаж http://vbporno.com/bondazh/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов neuroproject.ru -> Нейронные сети Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Rambler's Top100 Rambler's Top100