Deepity
Ultra-fast, SIMD-accelerated Predictive Coding
Loading...
Searching...
No Matches
ConvPCNetwork.h
Go to the documentation of this file.
1#pragma once
2#include <vector>
3#include <memory>
4#include <random>
7
13
14namespace Deep
15{
16 class PCNDiagnostics;
17
20 {
21 public:
25 explicit ConvPCNetwork(int batchSize) noexcept;
26 ~ConvPCNetwork() = default;
27
28 ConvPCNetwork(const ConvPCNetwork &) = delete;
30
33 void AddLayer(int inChannels, int outChannels,
34 int inHeight, int inWidth,
35 int kernelH, int kernelW,
36 int strideH = 1, int strideW = 1,
37 int padH = 0, int padW = 0,
38 float lr = 1e-6f, float ir = 0.1f,
39 float pr = 0.01f, float lmbda = 1e-2f,
42
46 void Compile();
48 void RandomizeWeights(std::mt19937 &rng) noexcept;
50 void ResetState() noexcept;
53 void Clamp(const std::vector<float> &input) noexcept;
56 float CalculateState() noexcept;
58 void UpdateState() noexcept;
60 void UpdateWeights() noexcept;
62 void UpdatePrecision() noexcept;
63
65 ConvPCLayer *GetTerminalLayer() noexcept { return layers.back().get(); }
67 const auto &GetLayers() const noexcept { return layers; }
69 int GetBatchSize() const noexcept { return batchSize; }
70
73 float TrainStep(const std::vector<float> &x, const std::vector<float> &y, int inferenceSteps);
76 std::vector<float> Predict(const std::vector<float> &x, int inferenceSteps);
77
81 void ProjectForward() noexcept;
85 float TrainStepWithProjection(const std::vector<float> &x, const std::vector<float> &y, int inferenceSteps);
89 std::vector<float> PredictWithProjection(const std::vector<float> &x, int inferenceSteps);
90
91 private:
92 std::vector<std::unique_ptr<ConvPCLayer>> layers;
93 std::unique_ptr<MemoryArena> arena;
94 int batchSize;
95
96 friend class PCNDiagnostics;
97 };
98} // namespace Deep
Convolutional counterpart to DiscriminativePCLayer.
A 64-byte-aligned bump-pointer allocator over a single heap-allocated block, used to pack every layer...
Convolutional Predictive Coding layer (im2col-based). See the file-level warning above before enablin...
Definition ConvPCLayer.h:46
ConvPCLayer * GetTerminalLayer() noexcept
Returns the last layer (outChannels==0, the terminal one).
Definition ConvPCNetwork.h:65
float TrainStepWithProjection(const std::vector< float > &x, const std::vector< float > &y, int inferenceSteps)
Full train step with forward-projection init: clamp input, project forward, clamp target,...
Definition ConvPCNetwork.cpp:131
friend class PCNDiagnostics
Definition ConvPCNetwork.h:96
void RandomizeWeights(std::mt19937 &rng) noexcept
Initializes every layer's weights randomly.
Definition ConvPCNetwork.cpp:39
std::vector< float > PredictWithProjection(const std::vector< float > &x, int inferenceSteps)
Inference-only counterpart to TrainStepWithProjection(): clamp input, project forward,...
Definition ConvPCNetwork.cpp:151
ConvPCNetwork(int batchSize) noexcept
Constructs an empty network; add layers via AddLayer(), then Compile() before use.
Definition ConvPCNetwork.cpp:5
void Clamp(const std::vector< float > &input) noexcept
Clamps the flattened, batched input to the first (input) layer.
Definition ConvPCNetwork.cpp:51
ConvPCNetwork & operator=(const ConvPCNetwork &)=delete
void UpdatePrecision() noexcept
Applies precision updates to every layer.
Definition ConvPCNetwork.cpp:76
float CalculateState() noexcept
Computes and returns the network's total energy at the current state, without changing it.
Definition ConvPCNetwork.cpp:56
~ConvPCNetwork()=default
void Compile()
Sums every layer's required float count into a single contiguous arena and binds each layer into it....
Definition ConvPCNetwork.cpp:28
float TrainStep(const std::vector< float > &x, const std::vector< float > &y, int inferenceSteps)
Full train step: clamp input+target, settle for inferenceSteps, update weights once,...
Definition ConvPCNetwork.cpp:82
void AddLayer(int inChannels, int outChannels, int inHeight, int inWidth, int kernelH, int kernelW, int strideH=1, int strideW=1, int padH=0, int padW=0, float lr=1e-6f, float ir=0.1f, float pr=0.01f, float lmbda=1e-2f, ActivationType aType=ActivationType::RELU, ActivationType dType=ActivationType::dRELU)
Adds a convolutional layer. Pass outChannels=0 to mark a terminal layer (no outgoing prediction).
Definition ConvPCNetwork.cpp:7
void UpdateWeights() noexcept
Applies weight updates to every layer.
Definition ConvPCNetwork.cpp:70
const auto & GetLayers() const noexcept
Returns every layer in the network, in the order they were added.
Definition ConvPCNetwork.h:67
ConvPCNetwork(const ConvPCNetwork &)=delete
std::vector< float > Predict(const std::vector< float > &x, int inferenceSteps)
Clamps input only, settles, and returns the terminal layer's settled beliefs (flattened,...
Definition ConvPCNetwork.cpp:101
int GetBatchSize() const noexcept
Returns the batch size given at construction.
Definition ConvPCNetwork.h:69
void UpdateState() noexcept
Runs one settling step on every layer.
Definition ConvPCNetwork.cpp:64
void ResetState() noexcept
Resets the beliefs (z) on every layer.
Definition ConvPCNetwork.cpp:45
void ProjectForward() noexcept
Seeds hidden layers from a genuine forward pass through current weights, instead of zero-init....
Definition ConvPCNetwork.cpp:119
A 64-byte-aligned bump-pointer allocator over a single contiguous block of host memory....
Definition MemoryArena.h:141
This file exists to provide both Tensor.h and IComputeBackend.h with device types without introducing...
Definition Backend.cpp:10
ActivationType
Identifies an activation function or its derivative, for dispatch tables and layer/backend APIs that ...
Definition ActivationType.h:25
@ RELU
Definition ActivationType.h:26
@ dRELU
Definition ActivationType.h:27