Обсуждение статьи "Нейросети - это просто" - страница 5

 

Интересное кино, которое было снято на несколько лет раньше. Называется, найди 7 отличий :-))




 
Boris Egorov:
Все таки дайте пример пож-та ... сильно не понятно как это использовать
Boris Egorov:

вы не поняли, я знаком с нейронными сетями

Когда логики нет, я не понимаю.

Если вы знакомы, то знаете, как это использовать.

Но если это просто претензия к статье в такой форме изложена, то я согласен.

 
Stanislav Korotky:

Когда логики нет, я не понимаю.

Если вы знакомы, то знаете, как это использовать.

Но если это просто претензия к статье в такой форме изложена, то я согласен.

да именно к статье, несмотря на то что статья правда классная, просто не все разбираются в этом и вот лично мне лень просто брать и пробовать - это съест столько времени и без гарантии результата и с обязательным наступанием на детские грабли, поэтому и хочется знать "как это работает"  - в смысле результатов трейдинга хотя бы на простой модели и скорости обучения этой модели на конкретном оборудовании, я так понимаю если автор написал этот титанический труд то у него точно есть хоть какие то просчитанные модельки и можно было бы накидать хоть какие то результаты в качестве эпилога, а так голая теория

 
Stanislav Korotky:

Если вы знакомы, то знаете, как это использовать.

а вот тут не факт .... все таки тут есть свои особенности

 
Boris Egorov:

а вот тут не факт .... все таки тут есть свои особенности

Я привел некоторые ссылки (и еще можно найти) с реализациями такой же НС с примерами использования. Это ж далеко не первая статья по теме, были более подробные.

 
Stanislav Korotky:

Я привел некоторые ссылки (и еще можно найти) с реализациями такой же НС с примерами использования. Это ж далеко не первая статья по теме, были более подробные.

Смотреть полностью не хочу повторяться, не подскажите там есть какая-то связь с принципом "5 почему" ?

А то ответа от автора не скоро наверное еще ждать, пока он весь гонорар потратит и вернётся на форум :)

 

Автор, проверьте пож-ста метод bool CLayer::CreateElement(const uint index).

После первого добавления элемента (нейрона) у Вас там m_data_total=0. Непорядок.

Вы хотя бы сравнили вышеуказанный метод с аналогичным: bool CArrayObj::Add(CObject *element).

Вообще совесть есть такой непроверенный код выкладывать или как?

Не хотел говорить, но больше не могу.

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Нейросети - это просто"

Boris Egorov, 2020.01.27 04:56

да именно к статье, несмотря на то что статья правда классная, просто не все разбираются в этом и вот лично мне лень просто брать и пробовать - это съест столько времени и без гарантии результата и с обязательным наступанием на детские грабли, поэтому и хочется знать "как это работает"  - в смысле результатов трейдинга хотя бы на простой модели и скорости обучения этой модели на конкретном оборудовании, я так понимаю если автор написал этот титанический труд то у него точно есть хоть какие то просчитанные модельки и можно было бы накидать хоть какие то результаты в качестве эпилога, а так голая теория

В видеоуроке пример есть. Просто автор статьи решил не заморачиваться. Вот здесь исходники.
 

Если посмотреть на оригинал, то там есть такой метод: 

void Net::feedForward(const vector<double> &inputVals)
{
    assert(inputVals.size() == m_layers[0].size() - 1);

    // Assign (latch) the input values into the input neurons
    for (unsigned i = 0; i < inputVals.size(); ++i) {
        m_layers[0][i].setOutputVal(inputVals[i]);
    }

    // forward propagate
    for (unsigned layerNum = 1; layerNum < m_layers.size(); ++layerNum) {
        Layer &prevLayer = m_layers[layerNum - 1];
        for (unsigned n = 0; n < m_layers[layerNum].size() - 1; ++n) {
            m_layers[layerNum][n].feedForward(prevLayer);
        }
    }
}

аналог в статье:

void CNet::feedForward(const CArrayDouble *inputVals)
  {
   if(CheckPointer(inputVals)==POINTER_INVALID)
      return;
//---
   CLayer *Layer=layers.At(0);
   if(CheckPointer(Layer)==POINTER_INVALID)
     {
      return;
     }
   int total=inputVals.Total();
   if(total!=Layer.Total()-1)
      return;
//---
   for(int i=0; i<total && !IsStopped(); i++) 
     {
      CNeuron *neuron=Layer.At(i);
      neuron.setOutputVal(inputVals.At(i));
     }
//---
   total=layers.Total();
   for(int layerNum=1; layerNum<total && !IsStopped(); layerNum++) 
     {
      CArrayObj *prevLayer = layers.At(layerNum - 1);
      CArrayObj *currLayer = layers.At(layerNum);
      int t=currLayer.Total()-1;
      for(int n=0; n<t && !IsStopped(); n++) 
        {
         CNeuron *neuron=currLayer.At(n);
         neuron.feedForward(prevLayer);
        }
     }
  }

Строчку выделил жёлтым. И в таком виде метод не работает. Потому что в исходнике добавляется ещё нейрон смещения (bias neuron).

Net::Net(const vector<unsigned> &topology)
{
    unsigned numLayers = topology.size();
    for (unsigned layerNum = 0; layerNum < numLayers; ++layerNum) {
        m_layers.push_back(Layer());
        unsigned numOutputs = layerNum == topology.size() - 1 ? 0 : topology[layerNum + 1];

        // We have a new layer, now fill it with neurons, and
        // add a bias neuron in each layer.
        for (unsigned neuronNum = 0; neuronNum <= topology[layerNum]; ++neuronNum) {
            m_layers.back().push_back(Neuron(numOutputs, neuronNum));
            cout << "Made a Neuron!" << endl;
        }

        // Force the bias node's output to 1.0 (it was the last neuron pushed in this layer):
        m_layers.back().back().setOutputVal(1.0);
    }
}
 
Aleksey Mavrin:

Смотреть полностью не хочу повторяться, не подскажите там есть какая-то связь с принципом "5 почему" ?

Нет. И не надо, потому что это из другой оперы.

 
Denis Kirichenko:

Автор, проверьте пож-ста метод bool CLayer::CreateElement(const uint index).

После первого добавления элемента (нейрона) у Вас там m_data_total=0. Непорядок.

Вы хотя бы сравнили вышеуказанный метод с аналогичным: bool CArrayObj::Add(CObject *element)...

Такая же ерунда и с методом CArrayCon::CreateElement(const int index)После первого добавления элемента m_data_total=0.

Причина обращения: