commit ed1425560d7afef27815068a304756f2b5af32bd
parent 69f35ff0382a5fbdfdfc4dbbce299e23f720fcb6
Author: Étienne Simon <etienne.jl.simon@gmail.com>
Date:   Mon,  6 May 2013 03:35:33 +0200
Add more criterion/module to the factories.
Diffstat:
| M | src/factory.cpp |  |  | 67 | ++++++++++++++++++++++++++++++++++++++++++++++++++----------------- | 
1 file changed, 50 insertions(+), 17 deletions(-)
diff --git a/src/factory.cpp b/src/factory.cpp
@@ -21,21 +21,17 @@
 #include <nmlp/criterions/CPUSquareLoss.h>
 #include <nmlp/criterions/GPUHingeLoss.h>
 #include <nmlp/criterions/GPUSquareLoss.h>
-#include <nmlp/modules/CPUConcatenation.h>
 #include <nmlp/modules/CPUIdentity.h>
 #include <nmlp/modules/CPULinear.h>
 #include <nmlp/modules/CPULogistic.h>
 #include <nmlp/modules/CPUPositiveShrink.h>
 #include <nmlp/modules/CPUSparseLinear.h>
 #include <nmlp/modules/CPUTanH.h>
-#include <nmlp/modules/CPUUnique.h>
 #include <nmlp/modules/GPUIdentity.h>
 #include <nmlp/modules/GPULinear.h>
 #include <nmlp/modules/GPUPositiveShrink.h>
 #include <nmlp/modules/GPUTanH.h>
-#include <nmlp/modules/GPUUnique.h>
 #include <nmlp/modules/SequentialModule.h>
-#include <nmlp/modules/TableModule.h>
 
 
 #include "factory.hpp"
@@ -45,7 +41,7 @@ boost::shared_ptr<SequentialModule> interactive_module_factory(std::istream &in,
 	std::string type;
 
 	while(out << "Module? ", in >> type, type!="end"){
-		if(type=="CPULinear"){
+		if(type=="CPULinear" || type=="CPUSparseLinear" || type=="GPULinear"){
 			std::size_t is=input_size;
 			out << "Output size? ";
 			in >> input_size;
@@ -53,12 +49,29 @@ boost::shared_ptr<SequentialModule> interactive_module_factory(std::istream &in,
 			double variance;
 			in >> variance;
 
-			boost::shared_ptr<CPULinear> p=boost::make_shared<CPULinear>(is, input_size);
-			p->randomize(variance);
-			module->addModule(p);
+			if(type=="CPULinear"){
+				boost::shared_ptr<CPULinear> p=boost::make_shared<CPULinear>(is, input_size);
+				p->randomize(variance);
+				module->addModule(p);
+			} else if(type=="CPUSparseLinear"){
+				boost::shared_ptr<CPUSparseLinear> p=boost::make_shared<CPUSparseLinear>(is, input_size);
+				p->randomize(variance);
+				module->addModule(p);
+			} else if(type=="GPULinear"){
+				boost::shared_ptr<GPULinear> p=boost::make_shared<GPULinear>(is, input_size);
+				p->randomize(variance);
+				module->addModule(p);
+			}
 		}
-		else if(type=="CPULogistic") module->addModule(boost::make_shared<CPULogistic>(input_size));
-		else if(type=="CPUTanH")     module->addModule(boost::make_shared<CPUTanH>(input_size));
+		else if(type=="CPUIdentity")       module->addModule(boost::make_shared<CPUIdentity>(input_size));
+		else if(type=="CPULogistic")       module->addModule(boost::make_shared<CPULogistic>(input_size));
+		else if(type=="CPUTanH")           module->addModule(boost::make_shared<CPUTanH>(input_size));
+		else if(type=="CPUPositiveShrink") module->addModule(boost::make_shared<CPUPositiveShrink>(input_size));
+		else if(type=="GPUIdentity")       module->addModule(boost::make_shared<GPUIdentity>(input_size));
+		else if(type=="GPULogistic")       module->addModule(boost::make_shared<GPULogistic>(input_size));
+		else if(type=="GPUTanH")           module->addModule(boost::make_shared<GPUTanH>(input_size));
+		else if(type=="GPUPositiveShrink") module->addModule(boost::make_shared<GPUPositiveShrink>(input_size));
+
 		else out << "Unknown module name.\n";
 	}
 
@@ -80,7 +93,7 @@ boost::shared_ptr<SequentialModule> detached_module_factory(boost::program_optio
 	std::vector<float>::const_iterator variance_it=variances.begin();
 
 	for(; module_it!=modules_str.end(); ++module_it){
-		if(*module_it=="CPULinear"){
+		if(*module_it=="CPULinear" || *module_it=="CPUSparseLinear" || *module_it=="GPULinear"){
 			if(size_it==sizes.end())
 				throw std::runtime_error("Missing a size value in configuration file");
 			if(variance_it==variances.end())
@@ -88,12 +101,29 @@ boost::shared_ptr<SequentialModule> detached_module_factory(boost::program_optio
 
 			std::size_t is=input_size;
 			input_size=*size_it++;
-			boost::shared_ptr<CPULinear> p=boost::make_shared<CPULinear>(is, input_size);
-			p->randomize(*variance_it++);
-			module->addModule(p);
+
+			if(*module_it=="CPULinear"){
+				boost::shared_ptr<CPULinear> p=boost::make_shared<CPULinear>(is, input_size);
+				p->randomize(*variance_it++);
+				module->addModule(p);
+			} else if(*module_it=="CPUSparseLinear"){
+				boost::shared_ptr<CPUSparseLinear> p=boost::make_shared<CPUSparseLinear>(is, input_size);
+				p->randomize(*variance_it++);
+				module->addModule(p);
+			} else if(*module_it=="GPULinear"){
+				boost::shared_ptr<GPULinear> p=boost::make_shared<GPULinear>(is, input_size);
+				p->randomize(*variance_it++);
+				module->addModule(p);
+			}
 		}
-		else if(*module_it=="CPULogistic") module->addModule(boost::make_shared<CPULogistic>(input_size));
-		else if(*module_it=="CPUTanH")     module->addModule(boost::make_shared<CPUTanH>(input_size));
+		else if(*module_it=="CPUIdentity")       module->addModule(boost::make_shared<CPUIdentity>(input_size));
+		else if(*module_it=="CPULogistic")       module->addModule(boost::make_shared<CPULogistic>(input_size));
+		else if(*module_it=="CPUTanH")           module->addModule(boost::make_shared<CPUTanH>(input_size));
+		else if(*module_it=="CPUPositiveShrink") module->addModule(boost::make_shared<CPUPositiveShrink>(input_size));
+		else if(*module_it=="GPUIdentity")       module->addModule(boost::make_shared<GPUIdentity>(input_size));
+		else if(*module_it=="GPULogistic")       module->addModule(boost::make_shared<GPULogistic>(input_size));
+		else if(*module_it=="GPUTanH")           module->addModule(boost::make_shared<GPUTanH>(input_size));
+		else if(*module_it=="GPUPositiveShrink") module->addModule(boost::make_shared<GPUPositiveShrink>(input_size));
 		else throw std::runtime_error("Unknown module name in configuration file");
 	}
 
@@ -107,7 +137,10 @@ boost::shared_ptr<SequentialModule> detached_module_factory(boost::program_optio
 
 boost::shared_ptr<Criterion> criterion_factory(std::string const &name, std::size_t size){
 	if(name=="CPUSquareLoss") return boost::make_shared<CPUSquareLoss>(size);
-
+	if(name=="CPUHingeLoss") return boost::make_shared<CPUHingeLoss>(size);
+	if(name=="CPUMaxLoss") return boost::make_shared<CPUMaxLoss>();
+	if(name=="GPUSquareLoss") return boost::make_shared<GPUSquareLoss>(size);
+	if(name=="GPUHingeLoss") return boost::make_shared<GPUHingeLoss>(size);
 	throw std::runtime_error("Criterion factory called on an unknown identifier");
 }