如何在一个Layer表中存储层信息

我刚开始学习Lua(5.4),想把神经网络(之前用Python)面向对象化。然而,当我测试我的Layer“类”时,结果很奇怪。我的表格的每一行内容都一样。 我的代码如下:

math.randomseed(os.time())


- 创建在下限和上限之间的随机值
- 函数可以更好,但对于这个问题已经够好了
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

- 神经网络中的单个神经元
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

- 神经网络中的单个层
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    表:000002AB12D5D7D0
2    表:000002AB12D5D7D0

L[1]应该有numberOfNeurons = 2,所以我期望得到以下结果之一:

init    函数:000001E022968760
neurons 表:000001E02297D6E0
numberOfNeurons 2

但它返回了以下结果:

init    函数:000001E022968760
neurons表:000001E02297D6E0
numberOfNeurons 3

而这与L[2]完全相同。

这让我相信,所有表格行都被最后一个条目覆盖。

有没有办法解决这个问题或者我做了什么错的事情?我怀疑这是因为我没有使用metatable,但我不知道这是不是问题。

点赞