"New Neural "は、MetaTrader 5プラットフォーム用のオープンソース・ニューラルネットワークエンジンプロジェクトです。 - ページ 86 1...798081828384858687888990919293...100 新しいコメント TheXpert 2013.05.08 18:07 #851 Serj_Che:何がそんなに恥ずかしいんだ? まあ、これがその証拠で、私は何もせずに唾を吐いたわけではないのです。) yu-sha 2013.05.08 18:09 #852 すぐにでも参加できる - 既製のソリューション、経験、そしてコーディングまで。アーキテクチャ、視点、方向性を十分に議論できるクローズドなスレッドが必要だ Yury Reshetov 2013.05.08 21:03 #853 yu-sha: すぐにでも参加できる - 既製のソリューション、経験、そしてコーディングまで。 多くの人が長い間、準備をしてきました。でも、MetaQuotesは言葉から行動に移せないんですよね。yu-sha さん。建築、視点、方向性を十分に議論できるクローズドなスレッドが必要これ以上、議論することはないでしょう?このスレッドだけで86ページ。このスレッド内のすべてのfloodersは、プライベートブランチに移動するという事実は、もちろん、フォーラムの訪問者の残りの部分は、洪水のページの数十を読むので、良くなりますする必要がありますされません。現実にはもっとシンプルで、必要な人、やり方を知っている人は、とっくにグリッドを設計しているからです。あとは、この掲示板の86ページの洪水を読む。要は、この掲示板の訪問者の中にも、それなりの経験やノウハウを持っている人が少なからずいるということです。例えば、Javaで自作したOOPプロジェクトが あります。mql5用にリビルドしていないのは、その必要性がなかったからです。 自分で学習アルゴリズムを使って作りました。主な利点は、隠れ層に必要なニューロンの数を事前に知ることができないことです。グリッドは、隠れ層から余分なニューロンを削除し、出力ニューロンからそれぞれ余分な重み付け係数を削除することができます。人工神経細胞はこんな感じです。package neuronet; import java.util.*; /** * Искусственный нейрон * @author Yury V. Reshetov */ public class Neuron { /** * Весовые коэффициенты */ private double[] weights = null; /** * Пороговое значение */ private double threshold = 0 d; private int[] result = null; /** * Конструктор нейрона * @param w весовые коэффициенты * @param t пороговое значение */ public Neuron(double[] w, double t) { this.weights = w; this.threshold = t; } /** * Конструктор случайного нейрона * @param inputs количество весовых коэффициентов * @param rand генератор псевдослучайных чисел */ public Neuron(int inputs, Random rand) { this.threshold = rand.nextDouble() * 2 d - 1 d; this.weights = new double[inputs]; for (int i = 0; i < inputs; i++) { this.weights[i] = rand.nextDouble() * 2 d - 1 d; } } /** * Вычисление * @param inputs входные значения * @return результат на выходе нейрона */ public double getOutput(double[] inputs) { double sum = this.threshold; for (int i = 0; i < this.weights.length; i++) { sum = sum + inputs[i] * this.weights[i]; } return this.getSigmoidValue(sum); } /** * Возвращает значения весовых коэффициентов * @return весовые коэффициенты */ public double[] getWeights() { return this.weights; } /** * Возвращает пороговое значение * @return пороговое значение */ public double getThreshold() { return this.threshold; } /** * Возвращает результаты * @return результаты */ public int[] getResult() { return this.result; } public void changeWeights(double[] w) { this.weights = w; } /** * Обучение нейрона * @param samples обучающая выборка. Последний элемент столбца - выходное значение */ public void learning(double[][] samples) { // Заменяем выходное значение на обратную функцию сигмоида из этого значения for (int i = 0; i < samples.length; i++) { samples[i][samples[0].length - 1] = this.getArcSigmoidValue(samples[i][samples[0].length - 1]); } double[][] tempsamples = new double[samples.length][samples[0].length * 2]; int count = samples[0].length; for (int i = 0; i < tempsamples.length; i++) { for (int j = 0; j < count; j++) { tempsamples[i][j] = samples[i][j]; tempsamples[i][j + count] = - tempsamples[i][j]; } } // Создаем объект оптимизатора Optimizator opt = new Optimizator(new Random()); // Получаем результаты this.result = opt.getDataForColls(tempsamples, tempsamples[0].length); // Переводим результаты в вещественный формат double[] res = new double[this.result.length]; for (int i = 0; i < res.length; i++) { res[i] = this.result[i]; } // Получаем значения количества использований оптимизатором для примеров int[] getP = opt.getP(); // Максимальное значение количества использований int maximum = getP[0]; // Индекс примера с максимальным количеством использований int maxindex = 0; // Ищем индекс примера с максимальным количеством использований for (int i = 1; i < getP.length; i++) { if (getP[i] > maximum) { maximum = getP[i]; maxindex = i; } } // Максимальное значение весового коэффициента double maxi = Math.abs(res[0]); // Ищем максимальное значение весового коэффициента for (int i = 1; i < res.length; i++) { if (Math.abs(res[i]) > maxi) { maxi = Math.abs(res[i]); } } // Стабильное абсолютное значение константы double bestsum = 0; // Вычисляем стабильное значение константы for (int j = 0; j < samples[0].length; j++) { bestsum = bestsum + res[j] * samples[maxindex][j]; } // Получаем стабильное абсолютное значение константы bestsum = Math.abs(bestsum); // Корректируем результаты на стабильное абсолютное значение константы for (int i = 0; i < res.length; i++) { res[i] = res[i] / bestsum; } // Вычисляем пороговое значение this.threshold = 1 d / res[res.length - 1]; // Вычисляем весовые коэффициенты for (int i = 0; i < this.weights.length; i++) { this.weights[i] = -res[i] / res[res.length - 1]; } } /** * Вычисляет значение сигмоидальной функции * @return значение сигмоидальной функции */ private double getSigmoidValue(double x) { return Math.atan(x); } /** * Вычисляет обратное значение сигмоидальной функции * @return обратное значение сигмоидальной функции */ private double getArcSigmoidValue(double x) { return Math.tan(x); } } 隠れ層はこのような形をしています。package neuronet; import java.util.*; /** * Скрытый слой * @author Yury V. Reshetov */ public class HiddenLayer { // Массив нейронов скрытого слоя private Neuron[] neurons = null; /** * Создание скрытого слоя нейронов * @param neuronscount количество нейронов в скрытом слое * @param inputscount количество входов у нейронов * @param rand генератор склучайных чисел */ public HiddenLayer(int inputscount, Random rand) { this.neurons = new Neuron[inputscount * 5]; System.out.println("Количество нейронов скрытого слоя = " + this.neurons.length); for (int i = 0; i < this.neurons.length; i++) { this.neurons[i] = new Neuron(inputscount, rand); } } /** * Возвращает массив нейронов * @return массив нейронов скрытого слоя */ public Neuron[] getNeurons() { return this.neurons; } /** * Возвращает результаты входного слоя * @param inputs массив входных значений * @return массив результатов */ public double[] getOutputs(double[] inputs) { double[] results = new double[this.neurons.length]; for (int i = 0; i < this.neurons.length; i++) { results[i] = this.neurons[i].getOutput(inputs); } return results; } /** * Получает обучающую выборку для следующего нейрона из входной обучающей выборки * @param samples обучающая выборка * @return обучающая выборка для следующего нейрона */ public double[][] getOutputs(double[][] samples) { double[][] results = new double[samples.length][this.neurons.length + 1]; for (int i = 0; i < samples.length; i++) { for (int j = 0; j < this.neurons.length; j++) { results[i][j] = this.neurons[j].getOutput(samples[i]); } results[i][this.neurons.length] = samples[i][samples[0].length - 1]; } return results; } /** * Изменение архитектуры скрытого слоя. * Удаляет лишние нейроны из скрытого слоя и лишние весовые * коэффициенты из следующего за данным слоем нейрона. * @param nextneuron нейрон после скрытого слоя */ public void reorganization(Neuron nextneuron) { int counter = 0; int[] result = nextneuron.getResult(); for (int i = 0; i < result.length - 1; i++) { if (result[i] != 0) { counter++; } } Neuron[] temp = new Neuron[counter]; double[] weights = new double[counter]; counter = 0; for (int i = 0; i < result.length - 1; i++) { if (result[i] != 0) { weights[counter] = nextneuron.getWeights()[i]; temp[counter] = this.neurons[i]; counter++; } } nextneuron.changeWeights(weights); this.neurons = temp; } }これが、3層グリッドの実装方法です。package neuronet; import java.util.*; /** * Трехслойная нейронная сеть с одним выходом * @author Yury V. Reshetov */ public class NN { private Random rand = null; private HiddenLayer hiddenlayer = null; private Neuron tailneuron = null; /** * Конструктор нейронной сети * @param inputs */ public NN() { } /** * Результат нейронной сети * @param sample значения входов * @return результат */ public double getOutput(double[] sample) { double[] sample1 = this.hiddenlayer.getOutputs(sample); return this.tailneuron.getOutput(sample1); } /** * Обучение нейронной сети * @param samples обучающая выборка */ public void learning(double[][] samples) { this.rand = new Random(); this.hiddenlayer = new HiddenLayer(samples[0].length - 1, this.rand); double[][] samples1 = this.hiddenlayer.getOutputs(samples); this.tailneuron = new Neuron(samples1[0].length - 1, this.rand); this.tailneuron.learning(samples1); this.hiddenlayer.reorganization(tailneuron); } } fellow 2013.05.09 04:35 #854 グリッドアルゴリズムも完成しているので、あとはmqhファイルに整形するだけです。 yu-sha 2013.05.09 05:40 #855 ネットワークの書き込みは問題ない問題は、どのようなソースで、どのように端末に 組み込むかである fellow 2013.05.09 05:42 #856 単純に、次の小節を予測すればいいのです。 yu-sha 2013.05.09 08:21 #857 の仲間 です。 あまり複雑なことはしないで、次の小節だけを予測することを提案します。ということで、私を消してください )))) fellow 2013.05.09 08:28 #858 Reshetovが提案したコードは、理論から実践に近いものですが、経験的に決定できるのに、なぜランダムな重みが必要なのか、まだ理解できていません。 Mykola Demko 2013.05.09 08:28 #859 yu-sha: いや、まあ、そういう質問の仕方なら、私のことは触れないでください )))Generation nekst storms neroyproekt :) 同じ失敗、カニとカマス。実践によれば、オープンソースプロジェクトは、最初の実装(コア)があってこそ発展し、オープンソースでは磨き(いろいろな装身具やユーザーの利便性を加えること)が行われるのです。 yu-sha 2013.05.09 10:04 #860 する」ことを知っている人は、すでにそうしている。当然、自分のために。Renat2013.05.04 14:45#.直接参加したいですか?資金と全体のマネジメントを出します。MQL5 Storageの 共通プロジェクトを立ち上げ、スタートさせることができます。私たちが満たさなければならない前提条件が2つあります。- 資金調達- 共通管理もう一つ重要な利点があります。それは、このプロジェクトの発起人が「旧」MetaQuotesのマネージャーであることです。そのため、この事業がスタートする前に破綻する可能性はほとんどありません。追伸オープンソースにすることで、何が問題なのでしょうか? 1...798081828384858687888990919293...100 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
何がそんなに恥ずかしいんだ?
すぐにでも参加できる - 既製のソリューション、経験、そしてコーディングまで。
アーキテクチャ、視点、方向性を十分に議論できるクローズドなスレッドが必要だ
すぐにでも参加できる - 既製のソリューション、経験、そしてコーディングまで。
yu-sha さん。
建築、視点、方向性を十分に議論できるクローズドなスレッドが必要
これ以上、議論することはないでしょう?このスレッドだけで86ページ。
このスレッド内のすべてのfloodersは、プライベートブランチに移動するという事実は、もちろん、フォーラムの訪問者の残りの部分は、洪水のページの数十を読むので、良くなりますする必要がありますされません。
現実にはもっとシンプルで、必要な人、やり方を知っている人は、とっくにグリッドを設計しているからです。あとは、この掲示板の86ページの洪水を読む。
要は、この掲示板の訪問者の中にも、それなりの経験やノウハウを持っている人が少なからずいるということです。
例えば、Javaで自作したOOPプロジェクトが あります。mql5用にリビルドしていないのは、その必要性がなかったからです。
自分で学習アルゴリズムを使って作りました。主な利点は、隠れ層に必要なニューロンの数を事前に知ることができないことです。グリッドは、隠れ層から余分なニューロンを削除し、出力ニューロンからそれぞれ余分な重み付け係数を削除することができます。人工神経細胞はこんな感じです。
隠れ層はこのような形をしています。
これが、3層グリッドの実装方法です。
ネットワークの書き込みは問題ない
問題は、どのようなソースで、どのように端末に 組み込むかである
あまり複雑なことはしないで、次の小節だけを予測することを提案します。
ということで、私を消してください ))))
いや、まあ、そういう質問の仕方なら、私のことは触れないでください )))
Generation nekst storms neroyproekt :) 同じ失敗、カニとカマス。
実践によれば、オープンソースプロジェクトは、最初の実装(コア)があってこそ発展し、オープンソースでは磨き(いろいろな装身具やユーザーの利便性を加えること)が行われるのです。
する」ことを知っている人は、すでにそうしている。当然、自分のために。
直接参加したいですか?
資金と全体のマネジメントを出します。MQL5 Storageの 共通プロジェクトを立ち上げ、スタートさせることができます。
私たちが満たさなければならない前提条件が2つあります。
- 資金調達
- 共通管理
もう一つ重要な利点があります。それは、このプロジェクトの発起人が「旧」MetaQuotesのマネージャーであることです。
そのため、この事業がスタートする前に破綻する可能性はほとんどありません。
追伸
オープンソースにすることで、何が問題なのでしょうか?