Помощь новичкам

Какой еще модуль.

Запустил C# код в PascalABC.Net, результаты ровно те же.

ConvNetABC.zip (63,2 КБ)

Выше написал.

Ну ясно

function Double.Operator Implicit(v: Double): Int32;
begin
  try
  Begin
    Result := Convert.ToInt32(v);
  End;
  Except
  on e: Exception do
  Begin
  End;
  End;
end;

А так ещё веселее: (ConvNetABC_Test.pas)

Uses ConvNetABC;
Uses System;
{Procedure PrintVol(v: Vol);
Begin
For Var y:=0 to v.Height-1 do
Begin
For Var d:=0 to v.Depth-1 do
Begin
For Var x:=0 to v.Width-1 do
Begin
Console.Write(v.Get(x, y, d).ToString() + ' ');
End;
Console.Write('  ');
End;
Console.WriteLine();
End;
End;}
var Return_V: Boolean;
    var V_Val: Double;
    var random: Random := new Random(3);
    function GaussRandom(): Double;
    begin
      if (Return_V)
      Then
      begin
        Return_V := false;
        Result := V_Val;
        exit;
      end;
      var u: Double := 2 * random.NextDouble() - 1;
      var v: Double := 2 * random.NextDouble() - 1;
      var r: Double := (u * u) + (v * v);
      if ((r = 0) or (r > 1))
      Then
      begin
        Result := GaussRandom();
        exit;
      end;
      var c: Double := Math.Sqrt(-2 * Math.Log(r) / r);
      V_Val := Double(v * c);
      Return_V := true;
      Result := Double(u * c);
      exit;
    end;
    function Randn(mu: Double; std: Double): Double;
    begin
      Result := mu + GaussRandom() * std;
      exit;
    end;
Begin
{Var a:=new Vol(2, 2, 2);
PrintVol(a);
Var Sigm:=new SigmoidLayer(2, 2, 2);
Var b:=Sigm.&Forward(a, true);
PrintVol(b);}
Console.WriteLine(Randn(-10.0, 10.0));
Console.WriteLine(Randn(-10.0, 10.0));
Console.WriteLine(Randn(-10.0, 10.0));
End.

Исправил преобразования и всё запустилось. Спасибо, @MrFresnel, @ibond. Разбираться с переполнением буду потом.

А библиотека начала нормально работать, скоро опубликую официально :wink:

Можете поподробнее о библиотеке рассказать?

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

Я как понимаю, Вы хотите, чтобы она была включена в PascalABC.Net как стандартная библиотека?

Хотел бы, но только после тестирования и реализации некоторых примеров.

Понятно. Название как-бы на это намекает, так как содержит ABC, характерное для имён стандартных модулей. :slight_smile:

Да, но вот когда руки дойдут до TensorFlowABC (по аналогии с TensorFlowJS)… :smile:

11 сообщений перенесены в тему Болталка PascalABC.NET

Когда мы с разработчиками вели разговор о включении в дистрибутив библиотеки, известной сейчас как NumLibABC, в частности, @Admin обратил мое внимание, что модули библиотеки максимально должны использовать современные приемы программирования и быть примером реализации алгоритмов именно средствами PascalABC.NЕТ, а не просто набором программ. Ваш код сейчас - это сишный слепок, который плохо читается и содержит чересчур много обращений в .NET вместо средств, реализованных непосредственно в языке. (те же Console.WriteLine вместо Println). Мне, конечно, все равно, что Вы там и как пишете (моя бы воля - я бы давал Ваш код читать в качестве наказания для изучающих Паскаль), но имейте в виду, что и Вам могут сказать то же, если захотите попытаться сделать свою библиотеку стандартной.

@Gleb, могу сказать следующее (по оформлению) на примере одного .pas файла.

  1. Код плохо стандартизирован, хотя, если это сырая версия, то тогда ладно.
    unit Converters;
    
    Uses System; // <-- Нет никакого разделения между uses и остальным содержимым файла, слеплено.
    class // <-- Почему на отдельной строке?
    function Double.Operator Implicit(v: Double): Int32;
    begin
      try
      Begin // <-- Лишние begin-end.
        Result := Convert.ToInt32(v);
      End;
      Except
      on e: Exception do // <-- Переменную, конечно, использовать можно, но зачем?
      Begin
      End;
      End;
    end; // <-- Почему два оператора слеплены и нет никакого разделения между ними (пустой строки)?
    class  // <-- Почему на отдельной строке?
    function Single.Operator Implicit(v: Single): Int32;
    begin
      Result := Convert.ToInt32(v); // Можно использовать краткий синтаксис объявления операторов с использованием :=.
    end;
    End.

.

  1. В рекомендациях по C# было правило:

Необходимо использовать именования типов C#, а не .NET common type system (CTS).

, применительно к PascalABC.Net это, к примеру, означает, что следует использовать не System.Int32, а integer.

  1. Много проблем в плане стиля написания идентификаторов, ключевых слов.
  2. Также, не надо переносить then на новую строку, это затрудняет чтение кода.

Версия ещё сырая. Надо добавить ещё много чего.

Главное, чтобы оно не целый день с ним считалось. Применение переадресаций (PABCSystem.Sqrt() вместо System.Math.Sqrt()) сильно замедляет код и делает его более зависимым от версии среды. По мимо того, я уже не помню и половины “стандартного Паскаля”. Времени на восстановление его в памяти и переписывание кода уйдёт просто уйма.

Я бы рекомендовал создать отдельную тему и вести историю версий - сообщать о нововведениях и улучшениях в каждой новой версии библиотеки, как это сделал, например, @RAlex в отношении NumLibABC. Возможно, для обсуждения нововведений потребовалась отдельная тема, чтобы не засорять первую, посвященную исключительно сообщению нововведений и улучшений пользователям.