C++元编程——RBM实现

懒的写什么了,直接上代码吧。受限玻尔兹曼机(RBM),用的是CD更新方法。在实验中发现RBM不能输入全样本集,不然会不收敛。比如v层有3个,你就不能把8种组合都拿进去训练,否则就训练不出个结果,你只选3个它效果会很好,也不知道是为什么。先展示一下测试代码吧。下面是异或运算的求解,最终结果也是OK的,能够正确求出1,0和0,0的结果,分别是1,0。

#include 
#include 
#include 
#include 

#include "bp.hpp"
#include "activate_function.hpp"
#include "restricked_boltzman_machine.hpp"


int main(int argc, char** argv)
{
	restricked_boltzman_machine<3, 20> rbm;
	while (true)
	{
		std::cout << "----------------------" << std::endl;
		std::vector> vec;
		vec.push_back(mat<3, 1, double>({ 1.,1.,0. }));
		vec.push_back(mat<3, 1, double>({ 1.,0.,1. }));
		vec.push_back(mat<3, 1, double>({ 0.,1.,1. }));
		vec.push_back(mat<3, 1, double>({ 0.,0.,0. }));

		for (int i = 0; i < 10000; ++i

你可能感兴趣的:(元编程学习实践,c++,算法,开发语言)