Я пытаюсь построить структуру класса для нейронной сети (ИНС) в Matlab путем определения класса Node:Определение Matlab класса с атрибутами другого класса
function NodeObject = Node(Input, Weights, Activation)
Features.Input = [];
Features.Weights = [];
Features.Activation = [];
Features.Input = Input;
Features.Weights = Weights;
Features.Activation = Activation;
NodeObject = class(Features, 'Node');
Где здесь вход является целым числом (ожидаемое количество входов), Weights - это вектор длины Features.Input
, а Features.Activation
- это строка, которая ссылается на функцию активации, хранящуюся в методах.
То, что я хочу делать дальше построить массив ячеек узлов и определить класс сети на основе этого массива:
function Architecture = Network(NodeArray)
ANN.Layers = []; % Number of layers in architecture
ANN.LayerWidths = []; % Vector of length ANN.Layers containing width of each layer
ANN.NodeArray = []; % Original input is cell array with layers in ascending order (input at top, output at bottom) with nodes in each row.
ANN.InputSizes = [];
% Find number of layers
ANN.Layers = length(NodeArray(:,1));
% Find width of each layer
Widths = zeros(ANN.Layers,1);
for i = 1:length(Widths)
Widths(i) = length(NodeArray(:,i));
end
ANN.LayerWidths = Widths;
% Pass NodeArray to Network class
ANN.NodeArray = NodeArray;
% Construct cell of input sizes
InputSizes = [];
for i = 1:ANN.Layers
for j = 1:Widths(i)
InputSizes(i,j) = NodeArray{i,j}.Inputs;
end
end
ANN.InputSizes = InputSizes;
Architecture = class(ANN, 'Network');
атрибуте ANN.InputSizes
пытается извлечь атрибуты в Node
объекта, но мой код не позволяет мне это делать. Как мне изменить эту проблему, или вы рекомендуете другую архитектуру для решения этой проблемы? В настоящее время мои классы Node
и Network
содержатся в двух отдельных каталогах, но я чувствую, что есть что-то еще, чего я не вижу. Для справки, у меня нет абсолютно никакого опыта в ООП, и из того, что я собрал, кажется, что Matlab - не лучшая среда для реализации этих структур. На данный момент, хотя у меня недостаточно опыта для реализации этого типа фреймворков на другом языке.
Может быть проще использовать формат classdef для определения ваших классов. – Suever
@Suever Я попытался определить класс 'Node2' с форматом' classdef', сохраненным в каталоге '@ Network', но определение' Network' не распознало его. Часть этой проблемы заключается в том, как я определяю свои классы, но частью этого также может быть то, как я связываю свои каталоги. – Mnifldz
@Folder должен иметь то же имя, что и класс, поэтому ему нужно будет '@ Node2'. Но с определениями 'classdef' вам вообще не нужно' @ Folder'. – Suever