• C# SqlTransaction блочит таблицу, как обойти блокировку или что делаю не так?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Игрался с уровнями блокировок connection.BeginTransaction(IsolationLevel.....) ни к чему это не привело.

    Попробуйте обе транзации - и основную, и в мелком методе - делать с уровнем изоляции Snapshot.
    По умолчанию изоляция транзакций в MS SQL реализуется через блокировки (изначально - обрабатываемых записей, но может переползти и на всю таблицу).
    А вообще, при работе с незакрытй транзакциейоя бы передавал в мелкий метод то подключение, на котором открыта транзакция, чтобы он работал с ней. Можно сделать этот параметр необязательным (null по умолчанию) и в случае, если он не передан - открывать дополнительное подключение.
    Ответ написан
    2 комментария
  • LSTM прогнозирование на 1 шаг, как спрогнозировать на N шагов?

    @dmshar
    Мне кажется, что у вас какое-то недопонимание на самом базовом уровне.
    Давайте разбираться. Начнем с начала. У вас датасет с двумя колонками. Т.е. у вас один объект, который последовательно во времени генерирует пары значений. И всего нагенерировал 4000 разных значений.
    Вы делаете предсказание. Чего от чего? На графике показан один ряд чисел. И по оси Х очевидно номера наблюдений. Т.е. у вас график зависимости какого-то одного значения во-первых, от времени, а во-вторых, возможно, от второго значения. Т.е. по сути у вас многомерная (двумерная) регрессия. И а самом деле ваш датасет должен содержать не две, а три колонки (те что вы описали+ время).
    Разумеется, при такой постановке для того, что-бы предсказать значение целевой переменной надо подать на вход значение времени для которого вы делаете прогноз (это просто) и значение второй переменной. А а его-то просто так ни откуда не возьмёшь.
    Многомерная модель временного ряда, даже с помощью LSTM, обрабатывается уже по другой схеме чем обычные одномерные временные ряды. Там используются специальные многошаговые схемы решений и еще некоторые специальные ухищрения. Описать это все в одном сообщении на форуме дело сложное. Лучше я дам ссылочки на статьи, в которых подробно описывается, как эти задачи решаются, в том числе с помощью Keras.
    https://www.machinelearningmastery.ru/multivariate...
    https://www.machinelearningmastery.ru/how-to-devel...
    https://habr.com/ru/post/495884/
    https://habr.com/ru/post/505338/
    Посмотрите, если разберетесь - то ваша задача может решится легко. Останутся вопросы - задавайте, попробуем помочь дальше.
    Ответ написан
    2 комментария
  • LSTM прогнозирование на 1 шаг, как спрогнозировать на N шагов?

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

    upd. как вариант, попробуй обучить еще один алгоритм предсказания, который будет работать на основе исключительно предсказанных первым алгоритмом данных, так как он у тебя похоже выступает в качестве усреднителя с более быстрой реакцией чем классические средние

    Избавляйся от вот таких лесенок, для любого алгоритма это хаос, а его не предугадаешь, преобразуй данные к другому виду, избавляйся от бесконечных значений первой производной. Предсказывай не сами значения а какие то вычисленные над ними, т.е. к примеру какие то оценки над данными в окне (мин/макс, матожидание и прочее прочее) выход за пределы, может интеграл (площадь под графиком) значений над и под некоторым средним, вероятности быть выше/ниже значения (в виде вектора для нескольких значений) или количества попаданий на интервалы и т.п.
    Ответ написан
    Комментировать
  • Нейросеть для прогнозирования неисправности, какую выбрать?

    @dmshar
    То, что вы написали - это отдельная ветвь на пересечении технической диагностики (в вашем случае скорее всего вибродиагностики) и современного машинного обучения. Называется Predictive maintenance.
    (Вы пишете "P.S. Возможно описал не столь понятно но идея вроде передана." - по приведенным ответам подозреваю, что большинство таки не поняли о чем речь. Если кому интересно, ознакомление можно начать, например, вот отсюда:
    https://towardsdatascience.com/how-to-implement-ma...).
    На самом деле, направление очень перспективное с точки зрения и экономической целесообразности и практического применения. Скажу по секрету - когда-то мне пришлось делать анализ литературы по этой теме и видел проекты, которые приносили миллионы и не рублей прибыли (помню, что в заказчиках были Caterpillar, Shell, Boing и пр. монстры). И литературы и интернет-источников - очень много. Другое дело, что использование нейросетей - это не самый пожалуй перспективное направление в этой проблеме, просто потому, что часто традиционные методы машинного обучения дают типа деревьев решений дают более эффективные решения. ​
    Кроме указанного поискового запроса, если заходить со стороны именно методов машинного обучения можно и с использование запросов типа "Anomaly Detection", "Novelty detection", "Сhange points detection".
    Ну и отдельной "строкой" - несколько примеров использования сетей глубокого обучения именно в задачах, близких к вашей (просто из того, что сейчас под рукой)
    https://www.researchgate.net/publication/341615540...
    https://www.sciencedirect.com/science/article/pii/...
    https://comtradedigital.com/wp-content/uploads/201...
    Удачи в исследованиях. Будут конкретные вопросы - задавайте.
    Ответ написан
    Комментировать
  • Сверточная нейронная сеть, для чего нужны несколько слоев сверки и как работают ядра на глубоких слоях?

    @OlegPyatakov
    pyatakov.com
    Если обычные многослойные нейронные сети вам понятны, то проще всего будет сформулировать, что "глубокие" сверточные слои выполняют такую же роль, как и "глубокие" слои в обычной нейросети. Они берут набор признаков из предыдущего слоя и комбинируя их получают новые более высокоуровневые признаки.

    Разница в том, что нейрон типового Dense слоя нейронной сети владеет всей информацией с предыдущего слоя, а сверточные слои оперируют "локальными" ядрами. Поэтому обычно между сверточными слоями делают какой-либо pooling и тогда ядра новых сверточных слоев, получается, используют бОльше информации с предыдущих слоев.

    Ведь там просто числа значение которых показывают наличие признака, но набор этих значений уже не дает какой то признак, а всего лишь показывает наличие этих прзнаков.

    Набор двух базовых признаков можно считать как один высокоуровневый.

    Очень условный пример:
    1. Например, вы на первом сверточном слое вы нашли одним ядром "левый угол глаза", а другим ядром "правый угол глаза".
    2. Сделали pooling. Теперь новый сверточный слой при таком же размере ядра в пикселях будет охватывать бОльшую часть картинки
    3. На втором сверточном слое, мы скомбинировать информацию, что "левый угол глаза" находится рядом слева от "правого угла глаза", то есть на этом слое мы можем сказать, что это новый признак "глаз".
    Ответ написан
    Комментировать
  • Как правильно запустить проект на Python на другом ПК?

    meaqese
    @meaqese
    Вижу как минимум 2 варианта:
    • Сохранить названия библиотек в файл pip freeze > requirements.txt, потом после переноса на другой ПК, запустить pip install -r requirements.txt
    • Собрать в один файл с помощью библиотеки pyinstaller и перенести на другой ПК как обычный .exe файл
    Ответ написан
    1 комментарий
  • С# Taks и Invoke почему то блокируется форма?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Посмотри как я реализовал класс Analyzer, напиши свой алгоритм по такому же принципу. Внимательно прочитай комментарии в коде класса. Почитай про события в C#. Напиши отдельный класс с алгоритмом, который генерирует события, а уже в форме подпишись на события и обновляй UI. Сообщения из алгоритма отправляй через контекст синхронизации, в алгоритме не дожидайся завершения работы обработчика события (метод Post у контекста синхронизации потоков). Не пиши весь код в методах обработчиках событий форм (окон).

    В классе Analyzer
    await Task.Delay(250);
    просто для имитации долгой работы.

    Код ниже слегка отличается от кода по ссылке.
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ProgressBarExample
    {
        internal class Analyzer
        {
            private readonly SynchronizationContext _synchronizationContext;
    
            public Analyzer()
            {
                // Если экземпляр класса будет создан в UI потоке,
                // то здесь будет контекст синхронизации UI потока, иначе пула потоков
                _synchronizationContext = SynchronizationContext.Current ?? new SynchronizationContext();
            }
    
            public event EventHandler<AnalyzerEventArgs> ProgressChanged;
    
            public Task<Data> DoWork()
            {
                return Task.Run(async () =>
                {
                    for (int i = 0; i < 100; i++)
                    {
                        // Имитация долгой работы
                        await Task.Delay(250);
                        // Здесь ты можешь так же как в своём коде вызывать OnProgressChanged
                        // раз в несколько миллисекунд. В форме в UI потоке без Invoke обрабатывать 
                        // событие, выводя те данные, которые ты поместишь в AnalyzerEventArgs
                        OnProgressChanged(new AnalyzerEventArgs("line " + (i + 1), 100));
                    }
                    return new Data() { Text = "Данные " };
                });
            }
    
            private void OnProgressChanged(AnalyzerEventArgs args)
            {
                // Перенаправляем выполнение в UI поток не ожидая пока отработает метод обработчик события.
                _synchronizationContext.Post(state =>
                {
                    ProgressChanged?.Invoke(this, (AnalyzerEventArgs)state);
                }, args); // args передаётся в переменную state (грубо говоря)
            }
        }
    }


    namespace ProgressBarExample
    {
        public class AnalyzerEventArgs
        {
            public int MaxLines { get; }
    
            public string CurrentLine { get; }
    
            public AnalyzerEventArgs(string currentLine, int maxLines)
            {
                CurrentLine = currentLine;
                MaxLines = maxLines;
            }
        }
    }


    namespace ProgressBarExample
    {
        public class Data
        {
            public string Text { get; set; }
        }
    }


    По ссылке полный код WPF приложения (не важно какой проект, в Windows Forms всё так же будет работать).
    Как сделать, чтобы ProgressBar работал во время нагрузки на приложение?
    Ответ написан
    1 комментарий
  • С# Taks и Invoke почему то блокируется форма?

    twobomb
    @twobomb
    Invoke помоему синхронно работает с основным потоком, если вы в Invoke засунули не просто обновление прогресс бара,а какой-то продолжительный процесс то будет блокироваться. Или используйте BeginInvoke или Invoke но обновляйте только прогресс бар через него не более.
    Ответ написан
    9 комментариев
  • Нейросети обучение, почему может падать процент распознаваний?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Отсутствие балансировки сигналов.
    Две метрики ещё забыли (кроме "распознано" или "прямое"): реверс/обратная (выход->вход) и ошибку.
    В целом, так должно решаться: "прямое"+"обратное"+"ошибка" => 0.
    Ответ написан
    4 комментария