如何修改自动编码器对象的只读输出?



我在运行指定的函数后得到一个类类型为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.

你为什么会遇到这个问题?

要理解这种行为,我们应该看看Autoencoder类(MATLABR20###toolboxnnetnnetnnnetworkAutoencoder.m(的内部。我们可以看到以下内容:

  • 'EncoderWeights'properties(SetAccess = private, Dependent)块内定义。
  • 为此属性定义了一个公共的"getter"方法:function val = get.EncoderWeights(this)

因此,我们看到'EncoderWeights'既不是可公开设置的字段,也没有公共设置方法,因此出现错误也就不足为奇了。顺便说一句,在 R2018b 上,错误可能会提供更多信息:

You cannot set the read-only property 'EncoderWeights' of Autoencoder.

(如果你不熟悉我上面使用的概念,我建议你阅读 MATLAB 中的类。

如何解决?

您可以使用Autoencoder对象的network()方法来获取network对象,然后根据需要对其进行自定义。在您的情况下,您可以将新权重分配给net.IW{1}。之后你可以trainsim等。

最新更新