38 std::vector<std::unique_ptr<DiscriminativePCLayer>> layers;
70 void AddLayer(
int size,
int nextSize,
float lr,
float ir,
float pr,
float lmbda,
71 void (*act)(
float *,
size_t),
void (*dAct)(
float *,
size_t,
bool));
83 void AddLayer(
int size,
int nextSize,
float lr,
float ir,
float pr,
float lmbda,
92 void Clamp(
const std::vector<float> &input);
131 const auto &
GetLayers() const noexcept {
return layers; }
144 return layers.back().get();
152 for (
auto &layer : layers)
153 layer->SetLearningRate(lr);
160 for (
auto &layer : layers)
161 layer->SetLearningRate(ir);
168 for (
auto &layer : layers)
169 layer->SetPrecisionRate(pr);
176 for (
auto &layer : layers)
184 for (
auto &layer : layers)
185 layer->SetOptimizer(opt);
193 float TrainStep(
const std::vector<float> &x,
const std::vector<float> &y,
int inferenceSteps);
199 std::vector<float>
Predict(
const std::vector<float> &x,
int inferenceSteps);
204 bool Save(
const std::string &filename)
const noexcept;
208 bool Load(
const std::string &filename)
noexcept;
214 std::unique_ptr<MemoryArena> arena;
Defines the single-layer implementation of a PC model.
A 64-byte-aligned bump-pointer allocator over a single heap-allocated block, used to pack every layer...
Defines useful optimization functions of a PC model.
Definition DiscriminativePCLayer.h:50
DiscriminativePCLayer * GetTerminalLayer() const
Returns the network's terminal (final) layer.
Definition DiscriminativePCNetwork.h:140
void SetLearningRate(float lr)
Sets the learning rate used for weight updates, on every layer.
Definition DiscriminativePCNetwork.h:150
std::vector< float > PredictWithProjection(const std::vector< float > &x, int inferenceSteps)
Same as Predict(), but with ProjectForward() called once after clamping the input,...
Definition DiscriminativePCNetwork.cpp:140
void Compile()
Loads all layers into one contiguous block of memory.
Definition DiscriminativePCNetwork.cpp:215
friend class PCNDiagnostics
Definition DiscriminativePCNetwork.h:215
DiscriminativePCNetwork()
Default constructor.
Definition DiscriminativePCNetwork.h:46
void SetPrecisionRate(float pr)
Sets the learning rate used for precision updates, on every layer.
Definition DiscriminativePCNetwork.h:166
bool Save(const std::string &filename) const noexcept
Saves the network's learned parameters to disk.
Definition DiscriminativePCNetwork.cpp:228
std::vector< float > Predict(const std::vector< float > &x, int inferenceSteps)
Runs a forward prediction pass (clamp, settle, read).
Definition DiscriminativePCNetwork.cpp:188
void ResetState() noexcept
Resets each layer's state without touching learned weights.
Definition DiscriminativePCNetwork.cpp:69
const auto & GetLayers() const noexcept
Returns every layer in the network, in the order they were added.
Definition DiscriminativePCNetwork.h:131
void AddLayer(int size, int nextSize, float lr, float ir, float pr, float lmbda, void(*act)(float *, size_t), void(*dAct)(float *, size_t, bool))
Adds a layer to the network.
Definition DiscriminativePCNetwork.cpp:22
DiscriminativePCNetwork & operator=(DiscriminativePCNetwork &&other) noexcept=default
Move assignment operator.
bool Load(const std::string &filename) noexcept
Loads the network's learned parameters from disk.
Definition DiscriminativePCNetwork.cpp:233
void ProjectForward() noexcept
Seeds every hidden layer's belief from a genuine forward pass through current weights,...
Definition DiscriminativePCNetwork.cpp:106
DiscriminativePCNetwork(int batchSize)
Batched constructor.
Definition DiscriminativePCNetwork.h:51
void UpdateWeights()
Updates each layer's weights.
Definition DiscriminativePCNetwork.cpp:94
void Clamp(const std::vector< float > &input)
Clamps the input to the first layer, necessary for prediction.
Definition DiscriminativePCNetwork.cpp:75
void UpdatePrecision()
Updates each layer's precision weighting.
Definition DiscriminativePCNetwork.cpp:100
void UpdateState()
Updates each layer's state.
Definition DiscriminativePCNetwork.cpp:88
int GetBatchSize() const noexcept
Returns the batch size for the network's layers.
Definition DiscriminativePCNetwork.h:135
float TrainStep(const std::vector< float > &x, const std::vector< float > &y, int inferenceSteps)
Runs a complete training step (clamp, settle, update, unclamp).
Definition DiscriminativePCNetwork.cpp:160
void SetLambda(float l)
Sets the weight-decay (L2 regularization) coefficient, on every layer.
Definition DiscriminativePCNetwork.h:174
DiscriminativePCNetwork(DiscriminativePCNetwork &&other) noexcept=default
Move constructor.
void RandomizeWeights(std::mt19937 &rng)
Randomizes the weights of each layer.
Definition DiscriminativePCNetwork.cpp:63
float CalculateState()
Calculates the state of each layer.
Definition DiscriminativePCNetwork.cpp:80
void SetInferenceRate(float ir)
Sets the inference rate used for state updates, on every layer.
Definition DiscriminativePCNetwork.h:158
float TrainStepWithProjection(const std::vector< float > &x, const std::vector< float > &y, int inferenceSteps)
Same as TrainStep(), but with ProjectForward() called once after clamping the input,...
Definition DiscriminativePCNetwork.cpp:118
~DiscriminativePCNetwork()=default
Default constructor; deletes each layer.
void SetOptimizer(OptimizerType opt) noexcept
Sets the optimizer used for weight updates, on every layer.
Definition DiscriminativePCNetwork.h:182
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
OptimizerType
Selects which weight-update rule a layer applies during UpdateWeights().
Definition AdamOptimizer.h:52