Как я могу изменить выходные данные только для чтения объекта Autoencoder? - PullRequest
0 голосов
/ 18 сентября 2018

Я получаю объект типа класса 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.

1 Ответ

0 голосов
/ 19 сентября 2018

Почему у вас возникает эта проблема?

Чтобы понять это поведение, мы должны взглянуть в класс Autoencoder (\MATLAB\R20###\toolbox\nnet\nnet\nnnetwork\Autoencoder.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 .)

Как ее решить?

Вы можете использовать network() метод вашего Autoencoder объекта, чтобы получить network объект, а затем настройте его по своему усмотрению.В вашем случае вы бы присвоили новый вес (ы) в net.IW{1}.После этого вы можете train, sim и т. Д.

...