serializatioin / deserialization and tests
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user