Skip to content

Commit

Permalink
[ShogunBoard] Refactor ParameterObserverInterface to make it pure.
Browse files Browse the repository at this point in the history
Add a ParameterObserverTensorBoard class which implements the
TFLogger utilities. Run also clang-format and add the new classes
to SWIG.
  • Loading branch information
geektoni authored and vigsterkr committed Jul 12, 2017
1 parent 7d9a05a commit 392ecd2
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 36 deletions.
2 changes: 2 additions & 0 deletions src/interfaces/swig/ParameterObserver.i
Expand Up @@ -4,10 +4,12 @@

%{
#include <shogun/lib/ParameterObserverInterface.h>
#include <shogun/lib/ParameterObserverTensorBoard.h>
#include <shogun/lib/ParameterObserverScalar.h>
#include <shogun/lib/ParameterObserverHistogram.h>
%}

%include <shogun/lib/ParameterObserverInterface.h>
%include <shogun/lib/ParameterObserverTensorBoard.h>
%include <shogun/lib/ParameterObserverScalar.h>
%include <shogun/lib/ParameterObserverHistogram.h>
19 changes: 8 additions & 11 deletions src/shogun/lib/ParameterObserverHistogram.cpp
Expand Up @@ -8,36 +8,33 @@
using namespace shogun;

ParameterObserverHistogram::ParameterObserverHistogram()
: ParameterObserverTensorBoard()
{
m_writer.init();
m_parameters = std::vector<std::string>();
}

ParameterObserverHistogram::ParameterObserverHistogram(
std::vector<std::string>& parameters)
: ParameterObserverInterface(parameters)
: ParameterObserverTensorBoard(parameters)
{
m_writer.init();
}

ParameterObserverHistogram::ParameterObserverHistogram(
const std::string& filename, std::vector<std::string>& parameters)
: ParameterObserverInterface(filename, parameters)
: ParameterObserverTensorBoard(filename, parameters)
{
m_writer.init();
}

ParameterObserverHistogram::~ParameterObserverHistogram()
: ~ParameterObserverTensorBoard()
{
m_writer.flush();
m_writer.close();
}

void ParameterObserverHistogram::on_next(const ObservedValue& value)
{
auto node_name = std::string("node");
auto format = TBOutputFormat();
auto event_value = format.convert_vector(value.first, value.second, node_name);
auto event_value =
format.convert_vector(value.first, value.second, node_name);
m_writer.writeEvent(event_value);
}

Expand All @@ -51,8 +48,8 @@ void ParameterObserverHistogram::on_complete()

bool ParameterObserverHistogram::filter(const std::string& param)
{
if (m_parameters.size() == 0)
return true;
if (m_parameters.size() == 0)
return true;

for (auto v : m_parameters)
if (v == param)
Expand Down
4 changes: 2 additions & 2 deletions src/shogun/lib/ParameterObserverHistogram.h
Expand Up @@ -5,15 +5,15 @@
#ifndef SHOGUN_PARAMETEROBSERVERHISTOGRAM_H
#define SHOGUN_PARAMETEROBSERVERHISTOGRAM_H

#include <shogun/lib/ParameterObserverInterface.h>
#include <shogun/lib/ParameterObserverTensorBoard.h>

namespace shogun
{
/**
* Implementation of a ParameterObserver which write to file
* histograms, given object emitted from a parameter observable.
*/
class ParameterObserverHistogram : public ParameterObserverInterface
class ParameterObserverHistogram : public ParameterObserverTensorBoard
{

public:
Expand Down
7 changes: 3 additions & 4 deletions src/shogun/lib/ParameterObserverInterface.cpp
Expand Up @@ -2,20 +2,19 @@

using namespace shogun;

ParameterObserverInterface::ParameterObserverInterface()
: m_parameters(), m_writer("shogun")
ParameterObserverInterface::ParameterObserverInterface() : m_parameters()
{
}

ParameterObserverInterface::ParameterObserverInterface(
std::vector<std::string>& parameters)
: m_parameters(parameters), m_writer("shogun")
: m_parameters(parameters)
{
}

ParameterObserverInterface::ParameterObserverInterface(
const std::string& filename, std::vector<std::string>& parameters)
: m_parameters(parameters), m_writer(filename.c_str())
: m_parameters(parameters)
{
}

Expand Down
6 changes: 0 additions & 6 deletions src/shogun/lib/ParameterObserverInterface.h
Expand Up @@ -7,7 +7,6 @@

#include <rxcpp/rx-observable.hpp>
#include <shogun/lib/any.h>
#include <tflogger/tensorflow_logger.h>

namespace shogun
{
Expand All @@ -18,7 +17,6 @@ namespace shogun
{

public:

/* One observed value, composed of:
* - step (for the graph x axis);
* - a pair composed of: parameter's name + parameter's value
Expand Down Expand Up @@ -76,10 +74,6 @@ namespace shogun
* List of parameter's names we want to monitor
*/
std::vector<std::string> m_parameters;
/**
* Writer object which will be used to write tensorflow::Event files
*/
tflogger::TensorFlowLogger m_writer;
};
}

Expand Down
19 changes: 8 additions & 11 deletions src/shogun/lib/ParameterObserverScalar.cpp
Expand Up @@ -8,36 +8,33 @@
using namespace shogun;

ParameterObserverScalar::ParameterObserverScalar()
: ParameterObserverTensorBoard()
{
m_writer.init();
m_parameters = std::vector<std::string>();
}

ParameterObserverScalar::ParameterObserverScalar(
std::vector<std::string>& parameters)
: ParameterObserverInterface(parameters)
: ParameterObserverTensorBoard(parameters)
{
m_writer.init();
}

ParameterObserverScalar::ParameterObserverScalar(
const std::string& filename, std::vector<std::string>& parameters)
: ParameterObserverInterface(filename, parameters)
: ParameterObserverTensorBoard(filename, parameters)
{
m_writer.init();
}

ParameterObserverScalar::~ParameterObserverScalar()
: ~ParameterObserverTensorBoard()
{
m_writer.flush();
m_writer.close();
}

void ParameterObserverScalar::on_next(const ObservedValue& value)
{
auto node_name = std::string("node");
auto format = TBOutputFormat();
auto event_value = format.convert_scalar(value.first, value.second, node_name);
auto event_value =
format.convert_scalar(value.first, value.second, node_name);
m_writer.writeEvent(event_value);
}

Expand All @@ -51,8 +48,8 @@ void ParameterObserverScalar::on_complete()

bool ParameterObserverScalar::filter(const std::string& param)
{
if (m_parameters.size() == 0)
return true;
if (m_parameters.size() == 0)
return true;

for (auto v : m_parameters)
if (v == param)
Expand Down
4 changes: 2 additions & 2 deletions src/shogun/lib/ParameterObserverScalar.h
Expand Up @@ -5,15 +5,15 @@
#ifndef SHOGUN_PARAMETEROBSERVERSCALAR_H
#define SHOGUN_PARAMETEROBSERVERSCALAR_H

#include <shogun/lib/ParameterObserverInterface.h>
#include <shogun/lib/ParameterObserverTensorBoard.h>

namespace shogun
{
/**
* Implementation of a ParameterObserver which write to file
* scalar values, given object emitted from a parameter observable.
*/
class ParameterObserverScalar : public ParameterObserverInterface
class ParameterObserverScalar : public ParameterObserverTensorBoard
{

public:
Expand Down
34 changes: 34 additions & 0 deletions src/shogun/lib/ParameterObserverTensorBoard.cpp
@@ -0,0 +1,34 @@
/*
* Written (W) 2017 Giovanni De Toni
*/

#include "ParameterObserverTensorBoard.h"

using namespace shogun;

ParameterObserverTensorBoard::ParameterObserverTensorBoard()
: ParameterObserverInterface(), m_writer("shogun")
{
m_writer.init();
}

ParameterObserverTensorBoard::ParameterObserverTensorBoard(
std::vector<std::string>& parameters)
: ParameterObserverInterface(parameters), m_writer("shogun")
{
m_writer.init();
}

ParameterObserverTensorBoard::ParameterObserverTensorBoard(
const std::string& filename, std::vector<std::string>& parameters)
: ParameterObserverInterface(parameters), m_writer(filename.c_str())
{
m_writer.init();
}

ParameterObserverTensorBoard::~ParameterObserverTensorBoard()
: ~ParameterObserverTensorBoard()
{
m_writer.flush();
m_writer.close();
}
49 changes: 49 additions & 0 deletions src/shogun/lib/ParameterObserverTensorBoard.h
@@ -0,0 +1,49 @@
/*
* Written (W) 2017 Giovanni De Toni
*/

#ifndef SHOGUN_PARAMETEROBSERVERTENSORBOARD_H
#define SHOGUN_PARAMETEROBSERVERTENSORBOARD_H

#include <shogun/lib/ParameterObserverInterface.h>

#include <tflogger/tensorflow_logger.h>

namespace shogun
{
class ParameterObserverTensorBoard : public ParameterObserverInterface
{

public:
/**
* Default constructor
*/
ParameterObserverTensorBoard();

/**
* Constructor
* @param parameters list of parameters which we want to watch over
*/
ParameterObserverTensorBoard(std::vector<std::string>& parameters);

/**
* Constructor
* @param filename name of the generated output file
* @param parameters list of parameters which we want to watch over
*/
ParameterObserverTensorBoard(
const std::string& filename, std::vector<std::string>& parameters);
/**
* Virtual destructor
*/
virtual ~ParameterObserverTensorBoard();

protected:
/**
* Writer object which will be used to write tensorflow::Event files
*/
tflogger::TensorFlowLogger m_writer;
};
}

#endif // SHOGUN_PARAMETEROBSERVERTENSORBOARD_H

0 comments on commit 392ecd2

Please sign in to comment.