运行指定的函数后,我得到一个类类型为Autoencoder
的对象:
[X,T] = wine_dataset;
hiddenSize = 25;
autoenc1 = trainAutoencoder(X,hiddenSize,...
'L2WeightRegularization',0,...
'SparsityRegularization',0,...
'SparsityProportion',1,...
'DecoderTransferFunction','purelin');
如果我尝试查询其中一个属性,我可以毫无问题地获得它,
>> autoenc1.EncoderWeights(1,1)
ans = -0.0404
但是,如果我尝试设置它,则会出现错误:
>> autoenc1.EncoderWeights(1,1) = 0.4
In class 'Autoencoder', no set method is defined for Dependent property 'EncoderWeights'. A
Dependent property needs a set method to assign its value.
答案 0 :(得分:0)
要了解这种行为,我们应该看一下Autoencoder
类(\MATLAB\R20###\toolbox\nnet\nnet\nnnetwork\Autoencoder.m
)的内部。我们可以看到以下内容:
'EncoderWeights'
在properties(SetAccess = private, Dependent)
块内定义。function val = get.EncoderWeights(this)
。因此,我们看到'EncoderWeights'
既不是可公开设置的字段,也不是可公开设置的方法-因此,如果遇到错误,也就不足为奇了。顺便说一句,在R2018b上,该错误可能会提供更多信息:
You cannot set the read-only property 'EncoderWeights' of Autoencoder.
(如果您不熟悉我上面使用的概念,建议您阅读有关classes in MATLAB的信息。)
您可以使用Autoencoder
对象中的network()
方法来获取network
对象,然后根据需要对其进行自定义。在您的情况下,您可以将新的权重分配给net.IW{1}
。之后,您可以train
,sim
等