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


#1336

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


#1337

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


#1338

ConvNetABC.zip (63,2 КБ)


#1340

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


#1341

Ну ясно

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

#1342

А так ещё веселее: (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.

#1343

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


#1344

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


#1345

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


#1346

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


#1347

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


#1348

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


#1349

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


#1350

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


#1351

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


#1352

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


#1354

@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 на новую строку, это затрудняет чтение кода.

#1355

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


#1356

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


#1357

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