Skip to content
Snippets Groups Projects
Commit 16f716ce authored by Erik Strand's avatar Erik Strand
Browse files

Compute loss and gradient

parent e3f60784
No related branches found
No related tags found
No related merge requests found
...@@ -45,11 +45,18 @@ Matrix compute_dct_matrix(uint32_t n_samples) { ...@@ -45,11 +45,18 @@ Matrix compute_dct_matrix(uint32_t n_samples) {
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
int main() { // Selects certain columns of a matrix.
//Vector x = Vector::Random(5); Matrix matrix_subset(Matrix const& matrix, std::vector<uint32_t> const& subset_indices) {
//std::cout << x << '\n'; Matrix subset(matrix.rows(), subset_indices.size());
for (uint32_t i = 0; i < subset_indices.size(); ++i) {
auto const index = subset_indices[i];
subset.col(i) = matrix.col(index);
}
return subset;
}
//--------------------------------------------------------------------------------------------------
int main() {
constexpr Scalar f1 = 697; constexpr Scalar f1 = 697;
constexpr Scalar f2 = 1209; constexpr Scalar f2 = 1209;
...@@ -67,7 +74,7 @@ int main() { ...@@ -67,7 +74,7 @@ int main() {
python_print("dct", dct); python_print("dct", dct);
// Part (c) // Part (c)
Vector const recovered_sample_values = dct_matrix.transpose() * dct; Vector recovered_sample_values = dct_matrix.transpose() * dct;
python_print("recovered_sample_values", recovered_sample_values); python_print("recovered_sample_values", recovered_sample_values);
// Part (d) // Part (d)
...@@ -93,5 +100,21 @@ int main() { ...@@ -93,5 +100,21 @@ int main() {
python_print("subset_sample_times", subset_sample_times); python_print("subset_sample_times", subset_sample_times);
python_print("subset_sample_values", subset_sample_values); python_print("subset_sample_values", subset_sample_values);
// Part (e)
Matrix const subset_dct_matrix = matrix_subset(dct_matrix, subset_indices);
Vector recovered_dct = Vector::Random(n_samples);
recovered_sample_values = dct_matrix.transpose() * recovered_dct;
Vector subset_recovered_sample_values(n_subsamples);
for (uint32_t i = 0; i < n_subsamples; ++i) {
auto const index = subset_indices[i];
subset_recovered_sample_values[i] = recovered_sample_values[index];
}
Vector subset_differences = subset_sample_values - subset_recovered_sample_values;
Scalar loss = subset_differences.squaredNorm();
Vector gradient = -2 * subset_dct_matrix * subset_differences;
std::cout << loss << '\n';
std::cout << gradient << '\n';
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment