14void scale_minimum_maximum_binary(Tensor<type, 2>& matrix,
17 const Index& column_index)
19 const Index rows_number = matrix.dimension(0);
22 type intercept = type(0);
26 slope = type(1)/(value_1-value_2);
27 intercept = -value_2/(value_1-value_2);
31 slope = type(1)/(value_2 - value_1);
33 intercept = -value_1/(value_2-value_1);
36 for(Index i = 0; i < rows_number; i++)
38 matrix(i, column_index) = slope*matrix(i, column_index)+intercept;
48void scale_mean_standard_deviation(Tensor<type, 2>& matrix,
49 const Index& column_index,
50 const Descriptives& column_descriptives)
52 const type slope = (column_descriptives.standard_deviation) <
static_cast<type
>(1e-3) ?
54 static_cast<type>(1)/column_descriptives.standard_deviation;
56 const type intercept = (column_descriptives.standard_deviation) <
static_cast<type
>(1e-3) ?
58 -static_cast<type>(1)*column_descriptives.mean/column_descriptives.standard_deviation;
60 for(Index i = 0; i < matrix.dimension(0); i++)
62 matrix(i, column_index) = matrix(i, column_index)*slope + intercept;
72void scale_standard_deviation(Tensor<type, 2>& matrix,
73 const Index& column_index,
74 const Descriptives& column_descriptives)
76 for(Index i = 0; i < matrix.dimension(0); i++)
78 matrix(i, column_index) = (matrix(i, column_index)) / column_descriptives.standard_deviation;
88void scale_minimum_maximum(Tensor<type, 2>& matrix,
89 const Index& column_index,
90 const Descriptives& column_descriptives,
91 const type& min_range,
const type& max_range)
93 const type slope =
abs(column_descriptives.maximum-column_descriptives.minimum) <
static_cast<type
>(1e-3) ?
95 type(max_range-min_range)/(column_descriptives.maximum-column_descriptives.minimum);
97 const type intercept =
abs(column_descriptives.maximum-column_descriptives.minimum) <
static_cast<type
>(1e-3) ?
99 type(min_range*column_descriptives.maximum-max_range*column_descriptives.minimum)/(column_descriptives.maximum-column_descriptives.minimum);
101 for(Index i = 0; i < matrix.dimension(0); i++)
103 matrix(i, column_index) = matrix(i, column_index)*slope + intercept;
108Tensor<type, 1> scale_minimum_maximum(
const Tensor<type, 1>& x)
110 const Tensor<type, 0> minimum = x.minimum();
111 const Tensor<type, 0> maximum = x.maximum();
113 const type min_range = type(-1);
114 const type max_range = type(1);
116 const type slope = (max_range-min_range)/(maximum()-minimum());
117 const type intercept = (min_range*maximum()-max_range*minimum())/(maximum()-minimum());
119 Tensor<type, 1> scaled_x(x.size());
121 for(Index i = 0; i < scaled_x.size(); i++)
123 scaled_x(i) = slope*x(i)+intercept;
130Tensor<type, 2> scale_minimum_maximum(
const Tensor<type, 2>& x)
132 const Index rows_number = x.dimension(0);
133 const Index columns_number = x.dimension(1);
135 Tensor<type, 2> scaled_x(rows_number, columns_number);
137 const Tensor<type, 1> columns_minimums = OpenNN::columns_minimums(x);
139 const Tensor<type, 1> columns_maximums = OpenNN::columns_maximums(x);
141 const type min_range = type(-1);
142 const type max_range = type(1);
144 for(Index j = 0; j < columns_number; j++)
146 const type minimum = columns_minimums(j);
147 const type maximum = columns_maximums(j);
149 const type slope = (max_range-min_range)/(maximum - minimum);
150 const type intercept = (min_range*maximum-max_range*minimum)/(maximum - minimum);
152 for(Index i = 0; i < rows_number; i++)
154 scaled_x(i,j) = slope*x(i,j)+intercept;
161void scale_logarithmic(Tensor<type, 2>& matrix,
const Index& column_index)
165 for(Index i = 0; i < matrix.dimension(0); i++)
167 if(!
isnan(matrix(i,column_index)) && matrix(i,column_index) <= type(0))
169 ostringstream buffer;
171 buffer <<
"OpenNN Exception: DataSet class.\n"
172 <<
"void scale_logarithmic(Tensor<type, 2>&, const Index&, const Descriptives&) method.\n"
173 <<
"Logarithmic scale method cannot be used with non-positive variables. \n";
175 throw logic_error(buffer.str());
179 for(Index i = 0; i < matrix.dimension(0); i++)
181 matrix(i,column_index) =
log(matrix(i,column_index));
191void unscale_minimum_maximum(Tensor<type, 2>& matrix,
192 const Index& column_index,
193 const Descriptives& column_descriptives,
194 const type& min_range,
const type& max_range)
196 const type slope =
abs(max_range-min_range) <
static_cast<type
>(1e-3)
198 : (column_descriptives.maximum-column_descriptives.minimum)/type(max_range-min_range);
200 const type intercept =
abs(max_range-min_range) <
static_cast<type
>(1e-3)
202 : -(min_range*column_descriptives.maximum-max_range*column_descriptives.minimum)/type(max_range-min_range);
204 for(Index i = 0; i < matrix.dimension(0); i++)
206 matrix(i, column_index) = matrix(i, column_index)*slope + intercept;
216void unscale_mean_standard_deviation(Tensor<type, 2>& matrix,
const Index& column_index,
const Descriptives& column_descriptives)
218 const type slope =
abs(column_descriptives.mean) <
static_cast<type
>(1e-3) ? type(0)
219 : column_descriptives.standard_deviation;
221 const type intercept =
abs(column_descriptives.mean) <
static_cast<type
>(1e-3)
222 ? column_descriptives.minimum
223 : column_descriptives.mean;
225 for(Index i = 0; i < matrix.dimension(0); i++)
227 matrix(i, column_index) = matrix(i, column_index)*slope + intercept;
237void unscale_standard_deviation(Tensor<type, 2>& matrix,
const Index& column_index,
const Descriptives& column_descriptives)
239 const type slope =
abs(column_descriptives.mean) <
static_cast<type
>(1e-3)
241 : column_descriptives.standard_deviation;
243 const type intercept =
abs(column_descriptives.mean) <
static_cast<type
>(1e-3)
244 ? column_descriptives.minimum
247 for(Index i = 0; i < matrix.dimension(0); i++)
249 matrix(i, column_index) = matrix(i, column_index)*slope + intercept;
259void unscale_logarithmic(Tensor<type, 2>& matrix,
const Index& column_index)
261 for(Index i = 0; i < matrix.dimension(0); i++)
263 matrix(i, column_index) =
exp(matrix(i, column_index));
HALF_CONSTEXPR half abs(half arg)
HALF_CONSTEXPR bool isnan(half arg)