【发布时间】:2018-03-21 02:29:24
【问题描述】:
我是使用 MATLAB 进行面向对象编程的新手,在初始化我正在构建的类时遇到了麻烦。我正在从头开始构建一个神经网络,我正在使用以下名为 network 的类和一个名为 layers 的初始化函数:
classdef network
properties
sizes
biases
weights
nLayers
end
methods
function [ ] = layers(self)
self.nLayers = length(self.sizes);
self.biases{1} = zeros(self.sizes(1));
for i = 2:self.nLayers
self.biases{i} = zeros(self.sizes(i), 1);
for j = 1:self.sizes(i)
bias(j, 1) = normRand(0);
end
self.biases{i} = bias(1:j, 1);
end
for i = 2:self.nLayers
for j = 1:self.sizes(i)
for k = 1:self.sizes(i-1)
weight(j, k) = normRand(0);
end
end
self.weights{i} = weight(1:j, 1:k);
end
end
所以在我创建了一个类网络的变量网络并将大小设置如下:
>> net = network; net.sizes = [2 3 2 4]
net =
network with properties:
sizes: [2 3 2 4]
biases: []
weights: []
nLayers: []
我运行图层函数,但没有任何更新。
>> net.layers
>> net
net =
network with properties:
sizes: [2 3 2 4]
biases: []
weights: []
nLayers: []
让我感到困惑的是,如果我在层函数的末尾设置一个断点,我会在调试模式下得到这些结果:
>> net.layers
29 end
K>> self
self =
network with properties:
sizes: [2 3 2 4]
biases: {[2×2 double] [3×1 double] [2×1 double] [4×1 double]}
weights: {[] [3×2 double] [2×3 double] [4×2 double]}
nLayers: 4
这是我正在寻找的结果。关于我做错了什么的任何想法?另外,有没有人知道将输入传递给类的方法,以便我可以创建我的网络,例如: 净 = 网络(大小) ?
另外,我知道 python 更适合神经网络,甚至 java 也会是更好的选择。我这样做是为了学习,我对任何人对哪种语言最适合这个问题的看法并不感兴趣。
谢谢
【问题讨论】:
标签: matlab class oop object initialization