Files
Rbm/source/matutils.hpp
T

98 lines
2.0 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;
#if 0
// Normalize over training all training pattern
arma::mat xn = arma::normalise(src, 2, 0);
arma::mat mean = arma::mean(src, 0);
arma::mat stddev = arma::stddev(src, 0);
#else
// Normalize over single training pattern
arma::mat xn = arma::normalise(src, 2, 1);
arma::mat mean = arma::mean(src, 1);
arma::mat stddev = arma::stddev(src, 1);
#endif
std::cout << "mean" << " : " << std::endl << mean << std::endl;
std::cout << "stddev" << ": " << std::endl << stddev << std::endl;
return xn;
}
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 */