|
|
#1
|
|||
|
|||
Создание класса
Пытаюсь написать классы, реализующие нейронную сеть:
Код:
unit NeuroNetUnit; interface uses SysUtils, Classes, Math; type TNeuron = class private NInp: Integer; // количество входов W: array of Double; // веса нейрона O: Double; // выход нейрона protected Procedure SetWeight(Index: Integer; NW: Double); function GetWeight(Index: Integer): Double; Procedure SetRandWeight; // задание случайных весов Procedure Computation(Inputs: array of Double); // вычисление выхода нейрона public Constructor Create(NI: Integer); property Weight[Index: Integer]: Double read GetWeight write SetWeight; property Output: Double read O; end; TLayer = class // Слой private NNeuron: Integer; // число нейронов в слое NInp: Integer; // количество входов Neurons: array of TNeuron; // Массив нейронов слоя O: array of Double; //массив выходов слоя protected function GetOutput(Index: Integer): Double; Procedure Computation(Inputs: array of Double); // вычисление выходов слоя public Constructor Create(NI, NN: Integer); //virtual; Procedure initializ; property Outputs[Index: Integer]: Double read GetOutput {write SetOutput}; end; TNeuroNetBP = class private NInp: Integer; // количество входов NLayer: Integer; // число слоев NNeuron: Integer; // число нейронов в слое NOutNeuron: Integer; // число нейронов в последнем слое (количество выходов) Layers: array of TLayer; // слои нейронов N: Double; //коэффициент скорости обучения NS: Integer; // число проходов при обучении protected Procedure SetSKoef(SK: Double); Procedure SetNStep(NNS: Integer); Procedure Step(Inputs: array of Double); // Проход вперед Procedure UpdateWeight(Output: array of Double); // корректировка весов (обратный проход) //Procedure Training(Inputs: array of Double; Output: array of Double); //обучение сети public Constructor Create(NI: Integer; NL: Integer; NN: Integer; NON: Integer); Procedure initializ; property SKoef: Double read N write SetSKoef; property NStep: Integer read NS write SetNStep; end; implementation //////////////////////////////////////////////////////////нейрон Constructor TNeuron.Create(NI: Integer); begin NInp:= NI; SetLength(W, NInp); end; Procedure TNeuron.SetWeight(Index: Integer; NW: Double); begin end; function TNeuron.GetWeight(Index: Integer): Double; begin end; Procedure TNeuron.SetRandWeight; begin end; Procedure TNeuron.Computation(Inputs: array of Double); begin end; //////////////////////////////////////////////////////////нейрон //////////////////////////////////////////////////////////слой Constructor TLayer.Create(NI: Integer; NN: Integer); begin NInp:= NI; NNeuron:= NN; SetLength(Neurons, NNeuron); SetLength(O, NNeuron); end; Procedure TLayer.initializ; var i: Integer; begin for i:=0 to (NNeuron-1) do begin Neurons[i].Create(NInp); Neurons[i].SetRandWeight; end; end; Procedure TLayer.Computation(Inputs: array of Double); begin end; function TLayer.GetOutput(Index: Integer): Double; begin Result:= O[Index]; end; //////////////////////////////////////////////////////////слой //////////////////////////////////////////////////////////сеть Constructor TNeuroNetBP.Create(NI: Integer; NL: Integer; NN: Integer; NON: Integer); begin NInp:= NI; NLayer:= NL; NNeuron:= NN; NOutNeuron:= NON; N:= 0.2; SetLength(Layers, NLayer); end; Procedure TNeuroNetBP.initializ; var i: Integer; begin Layers[0].Create(NInp, NNeuron); for i:=1 to NLayer-1 do Layers[i].Create(NNeuron, NNeuron); Layers[NLayer].Create(NLayer, NOutNeuron); end; Procedure TNeuroNetBP.SetSKoef(SK: Double); begin N:= SK; end; Procedure TNeuroNetBP.SetNStep(NNS: Integer); begin NS:= NNS; end; Procedure TNeuroNetBP.Step(Inputs: array of Double); begin end; Procedure TNeuroNetBP.UpdateWeight(Output: array of Double); begin end; //////////////////////////////////////////////////////////сеть end. при попытке создания: Код:
var NNet: TNeuroNetBP; begin NNet.Create(2, 3, 5, 1); NNet.SKoef:= 0.2; NNet.NStep:= 5; NNet.initializ; end; что я не так делаю? |
#2
|
||||
|
||||
Все не смотрел, заметил это:
Код:
var NNet: TNeuroNetBP; begin NNet := TNeuroNetBP.Create(2, 3, 5, 1); NNet.SKoef:= 0.2; NNet.NStep:= 5; NNet.initializ; end; Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
|||
|
|||
dr. F.I.N.
Спасибо! теперь работает |