Я только начал изучать Lua (5.4) и хотел ООП нейронной сети (раньше я делал это на Python). Однако, когда я тестировал свой класс Layer, у меня были некоторые странные результаты. В моей таблице одинаковое содержимое для каждой строки в таблице. Мой код выглядит следующим образом:
math.randomseed(os.time())
-- Creates random value between lower and upper bounds
-- the function could be better, but it works good enough for this
local function randbetween(lower_limit, upper_limit)
local treshold = 0.5
local value = math.random()
if value < treshold then return math.random() * lower_limit
elseif value >= treshold then return math.random() * upper_limit end
end
-- A single Neuron within a neural network
local Neuron = {}
function Neuron:init(numberOfInputs)
self.numberOfInputs = numberOfInputs
self.weights = {}
for i = 1,numberOfInputs,1 do self.weights[i] = randbetween(-1, 1) end
self.bias = randbetween(-1,1)
return self
end
-- A single layer within the neural network
local Layer = {}
function Layer:init(numberOfNeurons, numberOfInputsPerNeuron)
self.numberOfNeurons = numberOfNeurons
self.neurons = {}
for i = 1,numberOfInputsPerNeuron,1 do
self.neurons[i] = Neuron:init(numberOfInputsPerNeuron)
end
return self
end
local L = {}
L[1] = Layer:init(2,0)
L[2] = Layer:init(3, 2)
for k,v in pairs(L) do print(k,v) end
Это мой результат:
1 table: 000002AB12D5D7D0
2 table: 000002AB12D5D7D0
L [1] должен иметь numberOfNeurons = 2, поэтому я ожидаю что-то в этой строке:
init function: 000001E022968760
neurons table: 000001E02297D6E0
numberOfNeurons 2
Однако он возвращает:
init function: 000001E022968760
neurons table: 000001E02297D6E0
numberOfNeurons 3
Что идентично L [2].
Это наводит меня на мысль, что все строки таблицы перезаписываются последней записью.
Есть ли способ исправить это или я что-то делаю не так? Я подозреваю, что это происходит из-за того, что я не использую метатаблицы, но не знаю, проблема ли в этом.
init
функция должна создать новый объект,self
в этой областиLayer
относится к таблице, а не к уникальному объекту. эти вопросы и ответы могут вам помочь: stackoverflow.com/ questions / 65561981 / - person Nifim   schedule 11.02.2021