111 lines
2.2 KiB
C++
111 lines
2.2 KiB
C++
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
/*
|
|
* File: matutils.hpp
|
|
* Author: jens
|
|
*
|
|
* Created on 21. Januar 2022, 08:28
|
|
*/
|
|
|
|
#ifndef MATUTILS_HPP
|
|
#define MATUTILS_HPP
|
|
|
|
#include "RnnTextHelper.hpp"
|
|
|
|
#include <math.h>
|
|
|
|
namespace Matutils
|
|
{
|
|
inline void uniform(arma::mat& srcDst, double stdDev=1.0, double mu=0.5)
|
|
{
|
|
#if 0
|
|
for (size_t i=0; i < srcDst.n_rows; i++)
|
|
{
|
|
for (size_t j=0; j < srcDst.n_cols; j++)
|
|
{
|
|
srcDst(i, j) = stdDev*(Noise_Uniform(&m_noise) + mu - 0.5);
|
|
}
|
|
}
|
|
#else
|
|
srcDst = stdDev*(arma::randu(arma::size(srcDst)) + mu - 0.5);
|
|
#endif
|
|
}
|
|
|
|
inline arma::mat sample(const arma::mat &src)
|
|
{
|
|
arma::mat dst = src;
|
|
uniform(dst);
|
|
|
|
#if 0
|
|
for (size_t i=0; i < src.n_rows; i++)
|
|
{
|
|
for (size_t j=0; j < src.n_cols; j++)
|
|
{
|
|
dst(i, j) = src(i, j) >= dst(i, j);
|
|
}
|
|
}
|
|
return dst;
|
|
#else
|
|
arma::umat res = (dst < src);
|
|
return arma::conv_to<arma::mat>::from(res);
|
|
|
|
#endif
|
|
}
|
|
|
|
inline arma::mat normalize(const arma::mat& src)
|
|
{
|
|
std::cout << "Normalizing Training Data ..." << std::endl;
|
|
|
|
// Dim = 0: Normalize over training all training pattern
|
|
// Dim = 1: Normalize over single training pattern
|
|
double k = 1;
|
|
size_t dim = 0;
|
|
arma::mat mean = arma::mean(src, dim);
|
|
arma::mat stddev = arma::stddev(src, 0, dim);
|
|
|
|
arma::mat mean_mat;
|
|
arma::mat std_mat;
|
|
|
|
if (dim==0)
|
|
{
|
|
mean_mat = arma::repmat(mean, src.n_rows, 1);
|
|
std_mat = arma::repmat(stddev, src.n_rows, 1);
|
|
}
|
|
else
|
|
{
|
|
mean_mat = arma::repmat(mean, 1, src.n_cols);
|
|
std_mat = arma::repmat(stddev, 1, src.n_cols);
|
|
}
|
|
|
|
arma::mat xn = src - mean_mat;
|
|
arma::mat y = xn/(std_mat + 1e-9);
|
|
std::cout << "mean" << " : " << std::endl << arma::mean(y, dim) << std::endl;
|
|
std::cout << "stddev" << ": " << std::endl << arma::stddev(y, 0, dim) << std::endl;
|
|
return y;
|
|
}
|
|
|
|
inline arma::mat char2vec(char c, size_t len)
|
|
{
|
|
arma::mat result = arma::zeros(1, len);
|
|
int idx = RnnTextHelper::ch2idx(c);
|
|
result[idx] = 1;
|
|
|
|
return result;
|
|
}
|
|
|
|
inline char vec2char(arma::mat const &vec)
|
|
{
|
|
char result = RnnTextHelper::idx2ch(vec.index_max());
|
|
|
|
return result;
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* MATUTILS_HPP */
|
|
|