29 template<
typename Real_t>
30 void TReference<Real_t>::AddBiases(TMatrixT<Real_t> &A,
31 const TMatrixT<Real_t> &biases)
36 for(
size_t i = 0; i<m; i++)
38 for(
size_t j=0; j<n; j++)
40 A(i, j) += biases(i, 0);
47 template <
typename Real_t>
48 void TReference<Real_t>::UpdateParams(
49 TMatrixT<Real_t> &x, TMatrixT<Real_t> &tildeX, TMatrixT<Real_t> &y,
50 TMatrixT<Real_t> &z, TMatrixT<Real_t> &fVBiases, TMatrixT<Real_t> &fHBiases,
51 TMatrixT<Real_t> &fWeights, TMatrixT<Real_t> &VBiasError,
52 TMatrixT<Real_t> &HBiasError, Real_t learningRate,
size_t fBatchSize) {
55 for (
size_t i = 0; i < (size_t)fVBiases.GetNrows(); i++)
57 for (
size_t j = 0; j < (size_t)fVBiases.GetNcols(); j++) {
58 VBiasError(i, j) = x(i, j) - z(i, j);
59 fVBiases(i, j) += learningRate * VBiasError(i, j) / fBatchSize;
64 for (Int_t i = 0; i < fHBiases.GetNrows(); i++) {
66 for (Int_t j = 0; j < fVBiases.GetNrows(); j++) {
67 HBiasError(i, 0) += fWeights(i, j) * VBiasError(j, 0);
69 HBiasError(i, 0) *= y(i, 0) * (1 - y(i, 0));
70 fHBiases(i, 0) += learningRate * HBiasError(i, 0) / fBatchSize;
74 for (Int_t i = 0; i < fHBiases.GetNrows(); i++) {
75 for (Int_t j = 0; j < fVBiases.GetNrows(); j++) {
76 fWeights(i, j) += learningRate * (HBiasError(i, 0) * tildeX(j, 0) +
77 VBiasError(j, 0) * y(i, 0)) / fBatchSize;
84 template<
typename Real_t>
85 void TReference<Real_t>::SoftmaxAE(TMatrixT<Real_t> & A)
92 for (
size_t i = 0; i < m; i++) {
93 for (
size_t j = 0; j < n; j++) {
98 for (
size_t i = 0; i < m; i++) {
99 for (
size_t j = 0; j < n; j++) {
100 A(i, j) = exp(A(i, j)) / sum;
107 template <
typename Real_t>
108 void TReference<Real_t>::CorruptInput(TMatrixT<Real_t> &input,
109 TMatrixT<Real_t> &corruptedInput,
110 Real_t corruptionLevel) {
111 for(
size_t i=0; i< (size_t)input.GetNrows(); i++)
113 for(
size_t j=0; j<(size_t)input.GetNcols(); j++ )
116 if ((
size_t)((rand() / (RAND_MAX + 1.0)) * 100) %
117 ((size_t)(corruptionLevel * 10)) ==
120 corruptedInput(i, j) = 0;
124 corruptedInput(i, j) = input(i, j);
133 template <
typename Real_t>
134 void TReference<Real_t>::EncodeInput(TMatrixT<Real_t> &input,
135 TMatrixT<Real_t> &compressedInput,
136 TMatrixT<Real_t> &Weights) {
139 m = compressedInput.GetNrows();
140 a = input.GetNrows();
142 for (
size_t i = 0; i < m; i++) {
143 compressedInput(i, 0) = 0;
144 for (
size_t j = 0; j < a; j++) {
145 compressedInput(i, 0) =
146 compressedInput(i, 0) + (Weights(i, j) * input(j, 0));
151 template <
typename Real_t>
152 void TReference<Real_t>::ReconstructInput(TMatrixT<Real_t> &compressedInput,
153 TMatrixT<Real_t> &reconstructedInput,
154 TMatrixT<Real_t> &fWeights) {
155 for (
size_t i=0; i<(size_t)reconstructedInput.GetNrows(); i++)
157 reconstructedInput(i, 0) = 0;
158 for(
size_t j=0; j<(size_t)compressedInput.GetNrows();j++)
160 reconstructedInput(i, 0) += fWeights(j, i) * compressedInput(j, 0);
170 template<
typename Real_t>
171 void TReference<Real_t>::ForwardLogReg(TMatrixT<Real_t> &input,
173 TMatrixT<Real_t> &fWeights)
177 n = input.GetNrows();
178 for(
size_t i= 0; i < m; i++)
181 for(
size_t j=0; j < n; j++)
183 p(i, 0) += fWeights(i, j) * input(j, 0);
190 template<
typename Real_t>
191 void TReference<Real_t>::UpdateParamsLogReg(TMatrixT<Real_t> &input,
192 TMatrixT<Real_t> &output,
193 TMatrixT<Real_t> &difference,
195 TMatrixT<Real_t> &fWeights,
196 TMatrixT<Real_t> &fBiases,
202 n = input.GetNrows();
204 for(
size_t i= 0; i<m; i++)
206 difference(i, 0) = output(i, 0) - p(i, 0);
207 for(
size_t j=0; j<n; j++)
210 learningRate * difference(i, 0) * input(j, 0) / fBatchSize;
213 fBiases(i, 0) += learningRate * difference(i, 0) / fBatchSize;