• Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Знаешь, я тут вспомнил про это, сначала как-то забыл написать. Я просто попробовал кое что иное. Я взял случайные данные, сгенерированные генератором чисел ... И было забавно наблюдать за результатом.
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Но разбираться я буду позже) Просто на удивление я скормил ему данные просто так, не 1 или 0, нормализовал через сигмоиду и на выходе получилось схоже с тем что было и это меня очень удивляет :_:
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Хм, сколько именно не считал, на самом деле это вот этот код:
    https://github.com/rogalmic/opencl-csharp/blob/mas...

    Но я добавил еще вот это и получилось примерно одинаково, а итераций по 100М, так более веско что ли, не люблю ms высчитывать:
    public static void doItCPU()
            {
                
                var sw = new Stopwatch();
                sw.Start();
    
                int[] message = Enumerable.Range(2, 100000000).ToArray();
                Parallel.ForEach(message, (number, state, index) =>
                {
                    int upperlimit = (int)Math.Sqrt(number);
                    for (int i = 2; i <= upperlimit; i++)
                    {
                        if (message[index] % i == 0)  //no lock needed. every index is independent
                        {
                            message[index] = 0;
                            break;
                        }
                    }
                });
    
                sw.Stop();
                Console.WriteLine($"Total time: {sw.ElapsedMilliseconds.ToString()}");
                Console.ReadKey();
    
            }
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Хм, однако надо будет попробовать. А чем примерно пользоваться? Ну в смысле просто обычные double/float перемножать или есть что либо получше в смысле интерфейсов?

    Просто я пробовал как бенч поиск простых чисел и она оказалась чуть лучше Xeon E5-2696V4, то есть там +20% на моей RX580 8GB всего навсего ...
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Интересно однако, даже не знаю хорошо это или нет, хорошего от того когда комбинаторика срывается с цепи не всегда много... Просто это порождает множество вариантов и знать бы еще какой из них и правда будет работать лучше.

    А вот ресурсы да, судя по O = sigmoid(sigmoid(I*A)*B) - это при увеличении количества слоев будет зависимым и параллелится только на уровне самого умножения. Я C# использую и тут это кажется только набор классов Vector2-4 и матрицы там еще есть... Хм ну или OpenCL я пробовал, но моя видео карта не очень готова хватать звезды с неба =(

    В целом я про то что медленно работает, заметно медленно и распараллелить кажется толком то и нельзя никак всю кучу мелких вычислений ...Теперь явно будет о чем подумать в плане того что подавать на вход ...
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Т.е. я по большому счету делаю расчеты до, а inputs представляю как набор признаков где все они отвечают на вопрос в рамках ДА/НЕТ о чем либо про данные. Ну например, что данные сейчас выше среднего = 1 или 0, ну или ниже среднего = 1 или 0. И так по каждому случаю, в таком смысле у меня они нормализованы, но я думал что так и должно быть т.е. нельзя inputs кормить всеми подряд данными оО
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    rPman, Понятно, просто у меня Inputs они как byte идут, я в некотором смысле нормализовал их еще до ... Даже не думал, что как-то можно иначе и все равно будет работать ^_^
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    А что значит "еще нормализуют"? Т.е. я так понял нужно еще какую-то функцию/средства нормализации подключить кроме сигмоиды?
    Написано
  • Многослойный перцептрон - как выполнить действия?

    iamserge
    @iamserge Автор вопроса
    Прочитал что такое bias, слышу первый раз) А где он должен быть и как может выглядеть?
    Написано
  • OpenCL в C# - какими средствами и где взять HelloWorld?

    iamserge
    @iamserge Автор вопроса
    Едрен котобатон, у меня это включилось с первого раза
    Написано
  • OpenCL в C# - какими средствами и где взять HelloWorld?

    iamserge
    @iamserge Автор вопроса
    Василий Банников,
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenCL;
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                int[] Primes = Enumerable.Range(2, 1000000).ToArray();
                EasyCL cl = new EasyCL();
                cl.Accelerator = OpenCL.AcceleratorDevice.GPU;        //You can also set the accelerator after loading the kernel
                cl.LoadKernel(IsPrime);                  //Load kernel string here, (Compiles in the background)
                cl.Invoke("GetIfPrime", Primes.Length, Primes); //Call Function By Name With Parameters
                                                                //Primes now contains all Prime Numbers
            }
    
            static string IsPrime
            {
                get
                {
                    return @"
                    kernel void GetIfPrime(global int* message)
                    {
    
                        int index = get_global_id(0);
    
                        int upperl=(int)sqrt((float)message[index]);
                        for(int i=2;i<=upperl;i++)
                        {
                            if(message[index]%i==0)
                            {
                                //printf("" %d / %d\n"",index,i );
                                message[index]=0;
                                return;
                            }
                        }
    
                        //printf("" % d"",index);
    
                    }";
                }
            }
    
        }
    }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    MVV, И это верное направление было ...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Да, было бы хорошо избавиться от этого, как и от lock, которые так себе решение ...
    Хм ... Это тоже пойдет на пользу, BlockingCollection по описанию прямо то что нужно
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    MVV, Это 8.0.3
    private void Button2_Click(object sender, RoutedEventArgs e)
            {
               richTextBox2.AppendText(Environment.Version.ToString());
            }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Другие потоки, по сути дела есть поток один на сбор данных, он и создает новые ключи в словаре. Словарь состоит из массивов типа byte, где потоки смотрят есть ли для них задачки, в зависимости от условий. Например, вот такая матрица получается:

    key1[1 1 1 0]
    key2 [1 0 0 0]
    key3 [1 0 0 0]


    Ну и там уже уловия есть, когда и что можно делать т.к. они зависимы друг от друга, нельзя все распаралелить т.к. некоторым не будет хватать банально данных посчитанных другими.
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, А, ну в этом смысле - да, правда там глобальный словарь массивов, там-то я просто и ищу ... Использую lock() а словарь заполняется когда загружены и подготовлены данные из сети/диска, и готовы ссылки на задачки новые. В общем то простая система, меня сбило с толку всякое MQ непонятное

    Увы и ах, пока кажется вообще не ясно как решить проблему =( На Linux вообще по умолчанию доступно судя по всему =/
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    mayton2019, Вот тут вот не понял совсем ... Что такое MQ и что оттуда должно приходить...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    Я сделал то же самое:

    PS C:\Users\Sergey> cd e:
    PS E:\> cd test
    PS E:\test> dotnet new console
    The template "Console App" was created successfully.
    
    Processing post-creation actions...
    Restoring E:\test\test.csproj:
      Determining projects to restore...
      Restored E:\test\test.csproj (in 123 ms).
    Restore succeeded.
    
    
    PS E:\test> dotnet run
    The number of processors on this computer is 44.
    PS E:\test>


    Ах и да - это у меня Windows 10! Едрен батон ...
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    Ну потоки я создаю в ограниченном количестве, т.е. их несколько типов я вручную подгоняю по количеству ориентируясь на то справляются они с задачами или нет... При этом они сами находят себе новые задачи и выполняются все время, даже когда задач по факту нет, т.е. висят в таком виде:

    while(true)
    
    int idForTheCalc =  int.MaxValue
    // Ищу задачу на день и если нашел, тогда idForTheCalc получает id
    
                    // Если так и остался id по умолчанию, значит спим
                    if (idForTheCalc == int.MaxValue)
                    {
                        System.Threading.Thread.Sleep(2000);
                        continue;
    
                    }
    
    //Если нашел, то делаю что нибудь или опять искать и спать, если задач нет
    
    }
    Написано
  • C# и несколько CPU?

    iamserge
    @iamserge Автор вопроса
    У меня WPF на Net8 и по умолчанию исползуется только один CPU, второй он просто игнорирует ...
    Написано