LINUX.ORG.RU

Какой длины ряд для обучения нейросетей?

 ,


0

1

Использую что то вроде одномерного ряда для обучения нейросети, подбираю коэффициенты эпох обучения, но постоянно то один нейрон забирает почти всё, то другой. Ряд длиной 1000 чисел.



Последнее исправление: bad_master (всего исправлений: 1)

Что за модель? RNN? Какова архитектура сети? Я не спец по нейросетям, но может кто-то, кто разбирается, прочтет твой вопрос, и ни хрена не поймет…

seiken ★★★★★
()

Какой длины ряд

Ряд чего?

Использую что то вроде одномерного ряда

Что значит «что-то вроде»?

для обучения нейросети

Не слышал про обучение через какието ряды ))

подбираю коэффициенты эпох обучения

Их нельзя же подбирать они либо случайные изначально (+/- со склонением в ту или иную известную сторону) или не трогаются (или убираются вовсе)

но постоянно то один нейрон забирает почти всё

Из за влезания руками вестимо

Ряд длиной 1000 чисел.

Ну так это входные данные, а обучение то как реализовано?

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ряд из сигналов ЭКГ 12 отведений по 1000 значений, подбираю итерации а не коэффициенты эпохи

%[old_path]=which('rdsamp'); if(~isempty(old_path)) rmpath(old_path(1:end-8)); end
%wfdb_url='https://physionet.org/physiotools/matlab/wfdb-app-matlab/wfdb-app-toolbox-0-10-0.zip';
%[filestr,status] = urlwrite(wfdb_url,'wfdb-app-toolbox-0-10-0.zip');
%unzip('wfdb-app-toolbox-0-10-0.zip');
%cd mcode
%addpath(pwd)
%savepath
cd D:\EGC\ptb-xl-a-large-publicly-available-electrocardiography-dataset-1.0.1\records100\00000
%cd C:\Users\Evgeny\Downloads\ptb-xl-a-large-publicly-available-electrocardiography-dataset-1.0.1\ptb-xl-a-large-publicly-available-electrocardiography-dataset-1.0.1\records100\00000
clc;
clear;
%Learning signals NORM
signal=[];
signalun=[];
fs=[];
[signal(1,1:1000,1:12), fs(1), tm] = rdsamp('00001_lr');
[signal(2,1:1000,1:12), fs(2), tm] = rdsamp('00002_lr');
[signal(3,1:1000,1:12), fs(3), tm] = rdsamp('00003_lr');
[signal(4,1:1000,1:12), fs(4), tm] = rdsamp('00004_lr');
[signal(5,1:1000,1:12), fs(5), tm] = rdsamp('00005_lr');
[signal(6,1:1000,1:12), fs(6), tm] = rdsamp('00006_lr');
[signal(7,1:1000,1:12), fs(7), tm] = rdsamp('00007_lr');
[signal(8,1:1000,1:12), fs(8), tm] = rdsamp('00009_lr');
[signal(9,1:1000,1:12), fs(9), tm] = rdsamp('00010_lr');
[signal(10,1:1000,1:12), fs(10), tm] = rdsamp('00011_lr');
[signal(11,1:1000,1:12), fs(11), tm] = rdsamp('00012_lr');
[signal(12,1:1000,1:12), fs(12), tm] = rdsamp('00013_lr');
[signal(13,1:1000,1:12), fs(13), tm] = rdsamp('00014_lr');
[signal(14,1:1000,1:12), fs(14), tm] = rdsamp('00015_lr');
[signal(15,1:1000,1:12), fs(15), tm] = rdsamp('00016_lr');
[signal(16,1:1000,1:12), fs(16), tm] = rdsamp('00019_lr');
[signal(17,1:1000,1:12), fs(17), tm] = rdsamp('00021_lr');
[signal(18,1:1000,1:12), fs(18), tm] = rdsamp('00024_lr');
[signal(19,1:1000,1:12), fs(19), tm] = rdsamp('00025_lr');
[signal(20,1:1000,1:12), fs(20), tm] = rdsamp('00027_lr');
[signal(21,1:1000,1:12), fs(21), tm] = rdsamp('00029_lr');
[signal(22,1:1000,1:12), fs(22), tm] = rdsamp('00031_lr');
[signal(23,1:1000,1:12), fs(23), tm] = rdsamp('00033_lr');
[signal(24,1:1000,1:12), fs(24), tm] = rdsamp('00035_lr');
[signal(25,1:1000,1:12), fs(25), tm] = rdsamp('00036_lr');
[signal(26,1:1000,1:12), fs(26), tm] = rdsamp('00037_lr');
[signal(27,1:1000,1:12), fs(27), tm] = rdsamp('00038_lr');
[signal(28,1:1000,1:12), fs(28), tm] = rdsamp('00040_lr');
[signal(29,1:1000,1:12), fs(29), tm] = rdsamp('00042_lr');
[signal(30,1:1000,1:12), fs(30), tm] = rdsamp('00043_lr');

%...etc
%Learning signals IMI

[signalun(1,1:1000,1:12), fsu(1), tm] = rdsamp('00008_lr');
[signalun(2,1:1000,1:12), fsu(2), tm] = rdsamp('00039_lr');
[signalun(3,1:1000,1:12), fsu(3), tm] = rdsamp('00103_lr');
[signalun(4,1:1000,1:12), fsu(4), tm] = rdsamp('00139_lr');
[signalun(5,1:1000,1:12), fsu(5), tm] = rdsamp('00142_lr');
[signalun(6,1:1000,1:12), fsu(6), tm] = rdsamp('00146_lr');
[signalun(7,1:1000,1:12), fsu(7), tm] = rdsamp('00153_lr');
[signalun(8,1:1000,1:12), fsu(8), tm] = rdsamp('00161_lr');
[signalun(9,1:1000,1:12), fsu(9), tm] = rdsamp('00175_lr');
[signalun(10,1:1000,1:12), fsu(10), tm] = rdsamp('00181_lr');
[signalun(11,1:1000,1:12), fsu(11), tm] = rdsamp('00210_lr');
[signalun(12,1:1000,1:12), fsu(12), tm] = rdsamp('00234_lr');
[signalun(13,1:1000,1:12), fsu(13), tm] = rdsamp('00240_lr');
[signalun(14,1:1000,1:12), fsu(14), tm] = rdsamp('00257_lr');
[signalun(15,1:1000,1:12), fsu(15), tm] = rdsamp('00258_lr');
[signalun(16,1:1000,1:12), fsu(16), tm] = rdsamp('00266_lr');
[signalun(17,1:1000,1:12), fsu(17), tm] = rdsamp('00267_lr');
[signalun(18,1:1000,1:12), fsu(18), tm] = rdsamp('00269_lr');
[signalun(19,1:1000,1:12), fsu(19), tm] = rdsamp('00270_lr');
[signalun(20,1:1000,1:12), fsu(20), tm] = rdsamp('00281_lr');
[signalun(21,1:1000,1:12), fsu(21), tm] = rdsamp('00290_lr');
[signalun(22,1:1000,1:12), fsu(22), tm] = rdsamp('00323_lr');
[signalun(23,1:1000,1:12), fsu(23), tm] = rdsamp('00325_lr');
[signalun(24,1:1000,1:12), fsu(24), tm] = rdsamp('00337_lr');
[signalun(25,1:1000,1:12), fsu(25), tm] = rdsamp('00380_lr');
[signalun(26,1:1000,1:12), fsu(26), tm] = rdsamp('00383_lr');
[signalun(27,1:1000,1:12), fsu(27), tm] = rdsamp('00407_lr');
[signalun(28,1:1000,1:12), fsu(28), tm] = rdsamp('00423_lr');
[signalun(29,1:1000,1:12), fsu(29), tm] = rdsamp('00429_lr');
[signalun(30,1:1000,1:12), fsu(30), tm] = rdsamp('00442_lr');
%etc
t=[];
t=[-2;2];
net = newc(minmax(t),2);
net.inputs{1}.size = 1000;
net = init(net);
d=[];
d2=[];
s=[];
su=[];
    for jj=1:1:30
        %clc
        for jjj=1:1000
        for k=1:12
            s(jjj,k) = signal(jj,jjj,k);
            su(jjj,k) = signalun(jj,jjj,k);
        end
        end
        z=smoothdata(s);
        zu=smoothdata(su);
        x=sgolayfilt(z,0,15);
        xu=sgolayfilt(zu,0,15);

        net.trainParam.epochs = 500;
        net=train(net,x,[1 1 1 1 1 1 1 1 1 1 1 1 ;0 0 0 0 0 0 0 0 0 0 0 0]);
        net=train(net,xu,[0 0 0 0 0 0 0 0 0 0 0 0;1 1 1 1 1 1 1 1 1 1 1 1]); 
    end
count1 = 0;
count2 = 0;
    for jj=1:1:30
        %clc
        for jjj=1:1000
        for k=1:12
            s(jjj,k) = signal(jj,jjj,k);
            su(jjj,k) = signalun(jj,jjj,k);
        end
        end
        z=smoothdata(s);
        zu=smoothdata(su);
        x=sgolayfilt(z,0,15);
        xu=sgolayfilt(zu,0,15);
        disp('перший:');
        y=sim(net,x);
        count = 0;
        for j=1:2:23
            if y(j) == 1
                count=count+1;
            end
        end
        if count > 6
            count1=count1+1;
            disp('перший=');
            jj
        end
        disp('второй:');
        y2=sim(net,xu);
        count = 0;
        for j=2:2:25
            if y2(j) == 1
                count=count+1;
            end
        end
        if count > 6
            count2=count2+1;
            disp('второй=');
            jj
        end
        d = [d y];
        d2 = [d2 y2];
    end
count1
count2

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 3)

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

xmikex ★★★★
()
Ответ на: комментарий от xmikex

конечно ты прав, один ряд мало, но мой вопрос в том что он очень длинный ряд сам и код там дает несколько рядов в цикле обучает

bad_master
() автор топика
Ответ на: комментарий от thesis

Если он не тролль то у него что-то с головой. Посмотри остальные темы, часть из них выглядит просто тупняком, часть же - неприкрытый поток бреда одной большой простынёй.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Какой ты тут доктор нарисовался, что-то с головой! Молодец и иди токсичный в другие посты и там пости свои диагнозы направо и налево

bad_master
() автор топика
Ответ на: комментарий от torvn77

Ну ладно код ужасен, но я его еще не причесал, зато его много

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Что не понял? По памяти, алгоритм прост, сначала читаем данные двух классов, потом данные причесываем, потом обучаем train, потом подаем данные обучения в sym и методом большинства голосов определяется класс

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

Что это за виндовая шляпа? Что за ЯП? Не говори только что это что-то из того что я знаю, потому что так на них не пишут даже студенты. Это даже для матлаба плохо, хотя вроде как он.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

да все понятно в теории при распознавании минимум есть два класса, 1й и 2й. Надо отличить один от другого,а дальше брать набор признаков классов исходя из предметной области (физической сути объектов классов). Далее надо сделать два набора данных 2х классов - для обучения и для тестирования(по сути для ее обыденной работы нейросети), я пока что завис на том что набор для обучения неправильно распознается(скорее всего мало нейронов и слишком большая длительность данных) еще я забыл сколько надо обучать(последний раз 9 лет назад что-то делал по этому вопросу), у меня нейрон то один то второй переобучается либо выбывает по алгоритму WTA со штрафом и учителем, всегда один нейрон распознает оба набора из обучающей выборки как один класс, то есть один нейрон должен выдавать 12 единиц для своего класса, плюс данные надо отобрать эталоные, а код я так быстро на коленке написал непонятный для вас и остальных

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 2)
Ответ на: комментарий от Not_a_Troll

Самое смешное, что ты даже по делу пишешь, просто очень странно.

Not_a_Troll
()

но постоянно то один нейрон забирает почти всё, то другой. Ряд длиной 1000 чисел.

А потому что не надо использовать сети Кохонена там, где где надо использовать PCA/Шумоподавляющий автоинкодер для первичной обработки данных (извлечения фич).

И вообще, обе твоих темя явно должны быть в job!

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 3)
Ответ на: комментарий от bad_master

На питоне было бы лучше намного. Как минимум глупые вопросы бы ушли, а матлаб позволяет всякое делать бездумно с безумными результатами. Тебе как минимум надо крепко подумать сколько данных надо для машинного обучения, визуализация твоей карты Кохонена и вообще над количеством нейронов в ней, как именно надо подготовить данные для обучения (почему они должны быть случайно распределены или не совсем случайно и когда это нужно), при чём тут ряды и что надо делать, когда данных для обучения слишком мало (генерировать синтетику или брать алгоритмы которые не требуют столько данных как нейронки на обучение (random forest например), но вот как это делать в плане генерации синтетики, это на пару лекций хватит материала чтобы только въехать в тему, можешь гуглить (вариантов у тебя нету), но поможет не сильно (слишком много вариантов того что можно делать которые даже опытные люди не могут сразу правильные выбрать или вообще выбрать или вообще правильно, это тот момент когда в матан врывается опыт и искусство, потому что с точки зрения матана нет однозначно правильного решения или оно не известно), основная идея в том, что твои векторизованные данные в n-мерном пространстве не случайны и ты можешь генерировать новые вектора на обучение, которые статистически будут похожи на реальные данные, но вот какой именно способ генерации выбрать зависит от кучи параметров, таких как модель обучения, зачем именно нужна синтетика (требует ли алгоритм машинного обучения избыточно много данных или данных просто слишком мало), что важнее - правильно обрабатывать 96% случаев и дико врать на оставшихся 4% или обрабатывать не так точно, но врать меньше, какой характер связи скрытых зависимостей в данных и так далее). Ах да, в идеале ты даже должен подумать как именно правильно векторизовать твои данные, поскольку это можно сделать кучей способов.

peregrine ★★★★★
()
Ответ на: комментарий от bad_master

Я к тому что в реальности у тебя 2 нейрона в слое кохонена, но отнюдь не 2 в твоей нейронке. И да, кохонен кохонену рознь, там разные модификации есть, вплоть до того что нейроны будут удаляться/добавляться по необходимости (как и в любых нейронках, например нейронный газ или его аналоги такое творят), но нейронные сети кохонена это не много не то в чём я хорошо разбираюсь, так что могу наврать (про переменное число нейронов в них я читал, но то весьма сомнительный ресурс был в плане строгости изложения).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от bad_master

Ты не понимаешь азов машинного обучения просто и пытаешься натыкать что-то не думая. Само то, что ты думаешь что есть какое-то «сколько надо обучать» уже много говорит. Нету такого. Сколько обучать зависит от ошибок (сначала они падают, а потом приходит переобучение и они растут). Да, с переобучением можно и нужно бороться, но всё равно можно упороться так что оно придёт.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Я бы не был так категоричен, надо смотреть что у него за данные на самом деле. PCA, например, жидко обкакивается если у данных сложная топология. И распределение если не нормальное, то хоть PCA и может с ним работать, но тот же кохонен может быть лучше.

peregrine ★★★★★
()
Ответ на: комментарий от Not_a_Troll

Чуть позже в СМИ: на российском предприятии был создан не имеющий аналогов аппарат ЭКГ.

goingUp ★★★★★
()

И вообще, известный поисковик от корпорации бобра мне выдал вот это.

ОП, просвещайся.

shkolnick-kun ★★★★★
()
Ответ на: комментарий от shkolnick-kun

Уменьшение размерности и нейросетями делается, теми же картами кахонена или «бутылочным горлышком» (оно же энкодер/автоэнкодер) в структуре обычных нейронных сетей. А про ЭКГ важно что именно он там ищет, если ему надо на нормальные/ненормальные делить то там может очень сложная форма признаков быть, в плане того что размер и форма зубцов на ЭКГ ещё не делают её нормальной, ну и вообще там всё довольно сложно.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Уменьшение размерности и нейросетями делается, теми же картами кахонена или «бутылочным горлышком» (оно же энкодер/автоэнкодер) в структуре обычных нейронных сетей.

Я знаю.

ему надо на нормальные/ненормальные делить

Судя по всему - да.

там может очень сложная форма признаков быть

Да, может, но я бы начал с 1D-свёрточных сетей.

Собственно, Вот эти уважаемые господа так и сделали. В итоге, нехилый такой реснет нагородили…

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 4)
Ответ на: комментарий от shkolnick-kun

И да, задача у них была ровно та же самая: классифицировать ЭКГ с 12 отведениями.

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)

Подскажите пожалуйста, как задать свой вопрос на этом форуме? Я первый раз на форуме и ничего не понимаю(

Fox777
()
Ответ на: комментарий от bad_master

Что за модель? Слой Кохонена, 2 нейрона 1000x12 входов, 2x12 выходов.

Это уже почти линейная разделимость получается. А раз так, то правильнее и честнее делать SVM (Support Vector Machine). А дальше на него уже и ядро какое-нибудь нетривиальное накатить.

Waterlaz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.