serializatioin / deserialization and tests

This commit is contained in:
2016-04-06 15:54:47 +02:00
parent adb6708b39
commit 17cbf5effe
28 changed files with 437 additions and 280 deletions

View File

@@ -1,13 +1,19 @@
#pragma once
#include <SimpleJSON/SerializableObject.h>
#include <SimpleJSON/Factory.h>
#include <math.h>
#include <vector>
#include <string>
#define NEURAL_NETWORK_REGISTER_BASIS_FUNCTION(name,function) SIMPLEJSON_REGISTER(NeuralNetwork::BasisFunction::Factory,name,function)
#define NEURAL_NETWORK_REGISTER_BASIS_FUNCTION_FINISH(name,function) SIMPLEJSON_REGISTER_FINISH(NeuralNetwork::BasisFunction::Factory,name,function)
namespace NeuralNetwork {
namespace BasisFunction {
class BasisFunction {
class BasisFunction : public SimpleJSON::SerializableObject {
public:
virtual ~BasisFunction() {}
virtual float operator()(const std::vector<float>& weights, const std::vector<float>& input) const =0;
@@ -15,13 +21,9 @@ namespace BasisFunction {
/**
* @brief Function returns clone of object
*/
virtual BasisFunction* clone() const = 0;
/**
* @brief This is a virtual function for storing Basis function
* @returns json describing function
*/
virtual std::string stringify() const =0;
virtual std::unique_ptr<BasisFunction> clone() const = 0;
};
typedef SimpleJSON::Factory<BasisFunction> Factory;
}
}

View File

@@ -22,14 +22,18 @@ namespace BasisFunction {
virtual float operator()(const std::vector<float>& weights, const std::vector<float>& input) const override;
virtual BasisFunction* clone() const override {
return new Linear();
virtual std::unique_ptr<BasisFunction> clone() const override {
return std::unique_ptr<BasisFunction>(new Linear());
}
virtual std::string stringify() const override {
return "{ \"class\": \"NeuralNetwork::BasisFunction::Linear\" }";
virtual SimpleJSON::Type::Object serialize() const override {
return {{"class", "NeuralNetwork::BasisFunction::Linear"}};
}
static std::unique_ptr<Linear> deserialize(const SimpleJSON::Type::Object &) {
return std::unique_ptr<Linear>(new Linear());
}
NEURAL_NETWORK_REGISTER_BASIS_FUNCTION(NeuralNetwork::BasisFunction::Linear, deserialize)
};
}
}

View File

@@ -21,14 +21,19 @@ namespace BasisFunction {
return product;
}
virtual Product* clone() const override {
return new Product();
virtual std::unique_ptr<BasisFunction> clone() const override {
return std::unique_ptr<BasisFunction>(new Product());
}
virtual std::string stringify() const override {
return "{ \"class\": \"NeuralNetwork::BasisFunction::Product\" }";
virtual SimpleJSON::Type::Object serialize() const override {
return {{"class", "NeuralNetwork::BasisFunction::Product"}};
}
static std::unique_ptr<Product> deserialize(const SimpleJSON::Type::Object &) {
return std::unique_ptr<Product>(new Product());
}
NEURAL_NETWORK_REGISTER_BASIS_FUNCTION(NeuralNetwork::BasisFunction::Product, deserialize)
};
}
}

View File

@@ -1,5 +1,4 @@
#ifndef __BASIS_RADIAL_H_
#define __BASIS_RADIAL_H_
#pragma once
#include "./BasisFunction.h"
@@ -20,14 +19,19 @@ namespace BasisFunction
return sqrt(sum);
}
virtual BasisFunction* clone() const override {
return new Radial();
virtual std::unique_ptr<BasisFunction> clone() const override {
return std::unique_ptr<BasisFunction>(new Radial());
}
virtual std::string stringify() const override {
return "{ \"class\": \"NeuralNetwork::BasisFunction::Radial\" }";
virtual SimpleJSON::Type::Object serialize() const override {
return {{"class", "NeuralNetwork::BasisFunction::Radial"}};
}
static std::unique_ptr<Radial> deserialize(const SimpleJSON::Type::Object &) {
return std::unique_ptr<Radial>(new Radial());
}
NEURAL_NETWORK_REGISTER_BASIS_FUNCTION(NeuralNetwork::BasisFunction::Radial, deserialize)
};
}
}
#endif
}