Remove magix numbers.

This commit is contained in:
2018-03-22 15:07:13 +01:00
parent 0a8aa4e2eb
commit 632c85b2fb
10 changed files with 51 additions and 40 deletions

View File

@@ -19,15 +19,15 @@ ActivityAnimation::Color ActivityAnimation::colorBySign(float intensity)
} }
ActivityAnimation::ActivityAnimation( ActivityAnimation::ActivityAnimation(
const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions, const float *aPositions, const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions,
const float *bPositions, float xDist) : const float *aPositions, const float *bPositions) :
ActivityAnimation(interactions, aPositions, bPositions, xDist, ActivityAnimation::colorBySign) ActivityAnimation(interactions, aPositions, bPositions, ActivityAnimation::colorBySign)
{ {
} }
ActivityAnimation::ActivityAnimation( ActivityAnimation::ActivityAnimation(
const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions, const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions,
const float *aPositions, const float *bPositions, float xDist, ColoringFunction coloring) const float *aPositions, const float *bPositions, ColoringFunction coloring)
: :
bufferLength(3 * interactions.size()) bufferLength(3 * interactions.size())
{ {
@@ -44,7 +44,7 @@ ActivityAnimation::ActivityAnimation(
for (auto i : Range(3)) { for (auto i : Range(3)) {
startingPos.emplace_back(aPos[i]); startingPos.emplace_back(aPos[i]);
delta.emplace_back(bPos[i] - aPos[i] + (i % 3 ? 0 : xDist)); delta.emplace_back(bPos[i] - aPos[i] + (i % 3 ? 0 : LAYER_X_OFFSET));
} }
} }
} }

View File

@@ -15,10 +15,12 @@ namespace fmri
typedef std::array<float, 3> Color; typedef std::array<float, 3> Color;
typedef std::function<Color(float)> ColoringFunction; typedef std::function<Color(float)> ColoringFunction;
ActivityAnimation(const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions, ActivityAnimation(
const float *aPositions, const float *bPositions, float xDist); const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions,
ActivityAnimation(const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions, const float *aPositions, const float *bPositions);
const float *aPositions, const float *bPositions, float xDist, ColoringFunction coloring); ActivityAnimation(
const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions,
const float *aPositions, const float *bPositions, ColoringFunction coloring);
void draw(float timeScale) override; void draw(float timeScale) override;
static Color colorBySign(float intensity); static Color colorBySign(float intensity);

View File

@@ -15,9 +15,8 @@ void ImageInteractionAnimation::draw(float step)
drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), texture); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), texture);
} }
ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const std::vector<int> &shape, ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const std::vector<int> &shape, const std::vector<float> &prevPositions,
const std::vector<float> &prevPositions, const std::vector<float> &curPositions) :
const std::vector<float> &curPositions, float xDist) :
texture(loadTexture(data, shape[2], shape[1] * shape[3], shape[1])), texture(loadTexture(data, shape[2], shape[1] * shape[3], shape[1])),
startingPositions(MultiImageVisualisation::getVertices(prevPositions)), startingPositions(MultiImageVisualisation::getVertices(prevPositions)),
deltas(MultiImageVisualisation::getVertices(curPositions)), deltas(MultiImageVisualisation::getVertices(curPositions)),
@@ -26,6 +25,6 @@ ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const st
caffe::caffe_sub(deltas.size(), deltas.data(), startingPositions.data(), deltas.data()); caffe::caffe_sub(deltas.size(), deltas.data(), startingPositions.data(), deltas.data());
for (auto i = 0u; i < deltas.size(); i += 3) { for (auto i = 0u; i < deltas.size(); i += 3) {
deltas[i] = xDist; deltas[i] = LAYER_X_OFFSET;
} }
} }

View File

@@ -9,7 +9,8 @@ namespace fmri
class ImageInteractionAnimation : public Animation class ImageInteractionAnimation : public Animation
{ {
public: public:
ImageInteractionAnimation(const DType* data, const std::vector<int>& shape, const std::vector<float>& prevPositions, const std::vector<float>& curPositions, float xDist); ImageInteractionAnimation(const DType *data, const std::vector<int> &shape, const std::vector<float> &prevPositions,
const std::vector<float> &curPositions);
virtual void draw(float step); virtual void draw(float step);
private: private:

View File

@@ -3,7 +3,6 @@
#include <caffe/util/math_functions.hpp> #include <caffe/util/math_functions.hpp>
#include "PoolingLayerAnimation.hpp" #include "PoolingLayerAnimation.hpp"
#include "glutils.hpp" #include "glutils.hpp"
#include "Range.hpp"
#include "MultiImageVisualisation.hpp" #include "MultiImageVisualisation.hpp"
using namespace std; using namespace std;
@@ -11,7 +10,7 @@ using namespace fmri;
PoolingLayerAnimation::PoolingLayerAnimation(const LayerData &prevData, const LayerData &curData, PoolingLayerAnimation::PoolingLayerAnimation(const LayerData &prevData, const LayerData &curData,
const std::vector<float> &prevPositions, const std::vector<float> &prevPositions,
const std::vector<float> &curPositions, float xDist) : const std::vector<float> &curPositions) :
original(loadTextureForData(prevData)), original(loadTextureForData(prevData)),
downSampled(loadTextureForData(curData)), downSampled(loadTextureForData(curData)),
startingPositions(MultiImageVisualisation::getVertices(prevPositions)), startingPositions(MultiImageVisualisation::getVertices(prevPositions)),
@@ -25,7 +24,7 @@ PoolingLayerAnimation::PoolingLayerAnimation(const LayerData &prevData, const La
caffe::caffe_sub(targetPositions.size(), targetPositions.data(), startingPositions.data(), deltas.data()); caffe::caffe_sub(targetPositions.size(), targetPositions.data(), startingPositions.data(), deltas.data());
for (auto i = 0u; i < deltas.size(); i+=3) { for (auto i = 0u; i < deltas.size(); i+=3) {
deltas[i] = xDist; deltas[i] = LAYER_X_OFFSET;
} }
} }

View File

@@ -9,7 +9,9 @@ namespace fmri
class PoolingLayerAnimation : public Animation class PoolingLayerAnimation : public Animation
{ {
public: public:
PoolingLayerAnimation(const LayerData& prevData, const LayerData& curData, const std::vector<float>& prevPositions, const std::vector<float>& curPositions, float xDist); PoolingLayerAnimation(const LayerData &prevData, const LayerData &curData,
const std::vector<float> &prevPositions,
const std::vector<float> &curPositions);
void draw(float timeStep) override; void draw(float timeStep) override;

View File

@@ -94,7 +94,7 @@ static void render()
} }
glPopMatrix(); glPopMatrix();
glTranslatef(-10, 0, 0); glTranslatef(LAYER_X_OFFSET, 0, 0);
} }

View File

@@ -1,5 +1,7 @@
#include "utils.hpp" #include "utils.hpp"
const float fmri::LAYER_X_OFFSET = -10;
std::default_random_engine &fmri::rng() std::default_random_engine &fmri::rng()
{ {
static std::default_random_engine rng; static std::default_random_engine rng;

View File

@@ -16,6 +16,11 @@ namespace fmri
{ {
typedef float DType; typedef float DType;
/**
* The distance between layers in the visualisation.
*/
extern const float LAYER_X_OFFSET;
/** /**
* Identity function that simply returns whatever is put in. * Identity function that simply returns whatever is put in.
* *

View File

@@ -124,7 +124,7 @@ static Animation *getFullyConnectedAnimation(const fmri::LayerData &prevState, c
result.emplace_back(interactions[i], make_pair(i / shape[0] / normalizer, i % shape[0])); result.emplace_back(interactions[i], make_pair(i / shape[0] / normalizer, i % shape[0]));
} }
return new ActivityAnimation(result, prevPositions.data(), curPositions.data(), -10); return new ActivityAnimation(result, prevPositions.data(), curPositions.data());
} }
static Animation *getDropOutAnimation(const fmri::LayerData &prevState, static Animation *getDropOutAnimation(const fmri::LayerData &prevState,
@@ -145,7 +145,7 @@ static Animation *getDropOutAnimation(const fmri::LayerData &prevState,
results = deduplicate(results); results = deduplicate(results);
return new ActivityAnimation(results, prevPositions.data(), curPositions.data(), -10); return new ActivityAnimation(results, prevPositions.data(), curPositions.data());
} }
static Animation *getReLUAnimation(const fmri::LayerData &prevState, static Animation *getReLUAnimation(const fmri::LayerData &prevState,
@@ -165,16 +165,16 @@ static Animation *getReLUAnimation(const fmri::LayerData &prevState,
const auto maxValue = max_element(results.begin(), results.end())->first; const auto maxValue = max_element(results.begin(), results.end())->first;
return new ActivityAnimation(results, prevPositions.data(), curPositions.data(), -10, return new ActivityAnimation(results, prevPositions.data(), curPositions.data(),
[=](float i) -> ActivityAnimation::Color { [=](float i) -> ActivityAnimation::Color {
if (maxValue == 0) { if (maxValue == 0) {
return {1, 1, 1}; return {1, 1, 1};
} else { } else {
return {1 - i / maxValue, 1 - i / maxValue, 1}; return {1 - i / maxValue, 1 - i / maxValue, 1};
} }
}); });
} else { } else {
return new ImageInteractionAnimation(changes.data(), prevState.shape(), prevPositions, curPositions, -10); return new ImageInteractionAnimation(changes.data(), prevState.shape(), prevPositions, curPositions);
} }
} }
@@ -197,17 +197,18 @@ static Animation *getNormalizingAnimation(const fmri::LayerData &prevState, cons
auto max_val = *max_element(scaling.begin(), scaling.end()); auto max_val = *max_element(scaling.begin(), scaling.end());
return new ActivityAnimation(entries, prevPositions.data(), curPositions.data(),-10, [=](float i) -> ActivityAnimation::Color { return new ActivityAnimation(entries, prevPositions.data(), curPositions.data(),
auto intensity = clamp((i - 1) / (max_val - 1), 0.f, 1.f); [=](float i) -> ActivityAnimation::Color {
return { auto intensity = clamp((i - 1) / (max_val - 1), 0.f, 1.f);
1 - intensity, return {
1, 1 - intensity,
1 1,
}; 1
}); };
});
} else { } else {
transform(scaling.begin(), scaling.end(), scaling.begin(), [](float x) { return log(x); }); transform(scaling.begin(), scaling.end(), scaling.begin(), [](float x) { return log(x); });
return new ImageInteractionAnimation(scaling.data(), prevState.shape(), prevPositions, curPositions, -10); return new ImageInteractionAnimation(scaling.data(), prevState.shape(), prevPositions, curPositions);
} }
} }
@@ -233,7 +234,7 @@ Animation * fmri::getActivityAnimation(const fmri::LayerData &prevState, const f
return getReLUAnimation(prevState, curState, prevPositions, curPositions); return getReLUAnimation(prevState, curState, prevPositions, curPositions);
case LayerInfo::Type::Pooling: case LayerInfo::Type::Pooling:
return new PoolingLayerAnimation(prevState, curState, prevPositions, curPositions, -10); return new PoolingLayerAnimation(prevState, curState, prevPositions, curPositions);
case LayerInfo::Type::LRN: case LayerInfo::Type::LRN:
return getNormalizingAnimation(prevState, curState, prevPositions, curPositions); return getNormalizingAnimation(prevState, curState, prevPositions, curPositions);