Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Коэффициент при x
- $k = rand() / getrandmax() * (5 - (-5)) + (-5);
- // Свободный член уравнения прямой
- $c = rand() / getrandmax() * (5 - (-5)) + (-5);
- // Вывод данных начальной прямой
- echo "Starting line: $k * X + $c" . PHP_EOL;
- // Набор точек X:Y
- $data = array
- (
- 1 => 2,
- 2 => 4.2,
- 2.5 => 5,
- 3.8 => 7.9,
- 4 => 9,
- 6 => 10.2,
- 6.6 => 13,
- 7.2 => 15.3,
- 8 => 17.1,
- 8.5 => 19.5
- );
- // Скорость обучения
- $rate = 0.0001;
- // Высчитать y
- function proceed($x)
- {
- global $k, $c;
- return $x * $k + $c;
- }
- // Тренировка сети
- for ($i = 0; $i < 100000; $i++)
- {
- // Получить случайную X координату точки
- $x = array_rand($data);
- // Получить соответствующую Y координату точки
- $true_result = $data[$x];
- // Получить ответ сети
- $out = proceed($x);
- // Считаем ошибку сети
- $delta = $true_result - $out;
- // Меняем вес при x в соответствии с дельта-правилом
- $k += $delta * $rate * $x;
- // Меняем вес при постоянном входе в соответствии с дельта-правилом
- $c += $delta * $rate;
- }
- // Вывод данных готовой прямой
- echo "Result line: $k * X + $c";
- ?>
Add Comment
Please, Sign In to add comment