Skip to content

Commit b4935a1

Browse files
committed
Merge branch 'cpp_fixes'
2 parents 99f6e9b + 76d7959 commit b4935a1

File tree

2 files changed

+58
-56
lines changed

2 files changed

+58
-56
lines changed

Cpp/neural.cpp

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ double sigmoid_prim(double f) { return f * (1.0 - f); }
3030
/* network */
3131

3232
Vector Network::Predict(const Vector &input) const {
33-
Vector y_hidden = Vector(hiddenCount);
34-
Vector y_output = Vector(outputCount);
35-
return Predict(input, y_hidden, y_output);
33+
Vector y_hidden(hiddenCount);
34+
Vector y_output(outputCount);
35+
Predict(input, y_hidden, y_output);
36+
return y_output;
3637
}
3738

38-
Vector Network::Predict(const Vector &input, Vector &hidden,
39-
Vector &output) const {
39+
void Network::Predict(const Vector &input, Vector &hidden,
40+
Vector &output) const {
4041
for (std::size_t c = 0; c < hiddenCount; c++) {
4142
double sum = 0.0;
4243
for (size_t r = 0; r < input.size(); r++) {
@@ -54,55 +55,54 @@ Vector Network::Predict(const Vector &input, Vector &hidden,
5455

5556
output[c] = sigmoid(sum + biasesOutput[c]);
5657
}
57-
58-
return output;
5958
}
6059

6160
/* trainer */
6261

63-
Trainer Trainer::Create(Neural::Network &&network, size_t hiddenCount,
64-
size_t outputCount) {
65-
Vector hidden = Vector(hiddenCount);
66-
Vector output = Vector(outputCount);
67-
Vector gradHidden = Vector(hiddenCount);
68-
Vector gradOutput = Vector(outputCount);
69-
return Trainer{.network = network,
70-
.hidden = hidden,
71-
.output = output,
72-
.gradHidden = gradHidden,
73-
.gradOutput = gradOutput};
62+
Trainer Trainer::Create(Neural::Network network) {
63+
Vector hidden(network.hiddenCount);
64+
Vector output(network.outputCount);
65+
Vector gradHidden(network.hiddenCount);
66+
Vector gradOutput(network.outputCount);
67+
return Trainer{.network = std::move(network),
68+
.hidden = std::move(hidden),
69+
.output = std::move(output),
70+
.gradHidden = std::move(gradHidden),
71+
.gradOutput = std::move(gradOutput)};
7472
}
7573

7674
Trainer Trainer::Create(size_t inputCount, size_t hiddenCount,
77-
size_t outputCount, std::function<double()> rand) {
78-
Vector hidden = Vector(hiddenCount);
79-
Vector output = Vector(outputCount);
80-
Vector gradHidden = Vector(hiddenCount);
81-
Vector gradOutput = Vector(outputCount);
82-
Vector weightsHidden = Vector();
75+
size_t outputCount, RandFcn rand) {
76+
Vector hidden(hiddenCount);
77+
Vector output(outputCount);
78+
Vector gradHidden(hiddenCount);
79+
Vector gradOutput(outputCount);
80+
Vector weightsHidden;
81+
weightsHidden.reserve(inputCount * hiddenCount);
8382
for (size_t i = 0; i < inputCount * hiddenCount; i++) {
8483
weightsHidden.push_back(rand() - 0.5);
8584
}
8685

87-
Vector biasesHidden = Vector(hiddenCount);
88-
Vector weightsOutput = Vector();
86+
Vector biasesHidden(hiddenCount);
87+
Vector weightsOutput;
88+
weightsOutput.reserve(hiddenCount * outputCount);
8989
for (size_t i = 0; i < hiddenCount * outputCount; i++) {
9090
weightsOutput.push_back(rand() - 0.5);
9191
}
9292

93-
Vector biasesOutput = Vector(outputCount);
93+
Vector biasesOutput(outputCount);
9494
Neural::Network network = {.inputCount = inputCount,
9595
.hiddenCount = hiddenCount,
9696
.outputCount = outputCount,
9797
.weightsHidden = std::move(weightsHidden),
9898
.biasesHidden = std::move(biasesHidden),
9999
.weightsOutput = std::move(weightsOutput),
100100
.biasesOutput = std::move(biasesOutput)};
101-
return Trainer{.network = network,
102-
.hidden = hidden,
103-
.output = output,
104-
.gradHidden = gradHidden,
105-
.gradOutput = gradOutput};
101+
return Trainer{.network = std::move(network),
102+
.hidden = std::move(hidden),
103+
.output = std::move(output),
104+
.gradHidden = std::move(gradHidden),
105+
.gradOutput = std::move(gradOutput)};
106106
}
107107

108108
void Trainer::Train(const Vector &input, const Vector &y, double lr) {

Cpp/neural.h

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,32 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2424
#include <vector>
2525

2626
namespace Neural {
27-
typedef std::vector<double> Vector;
28-
typedef std::vector<Vector> Matrix;
29-
struct Network {
30-
size_t inputCount;
31-
size_t hiddenCount;
32-
size_t outputCount;
33-
Vector weightsHidden;
34-
Vector biasesHidden;
35-
Vector weightsOutput;
36-
Vector biasesOutput;
37-
Vector Predict(const Vector& input) const;
38-
Vector Predict(const Vector& input, Vector& hidden, Vector& output) const;
39-
};
27+
typedef std::vector<double> Vector;
28+
typedef std::vector<Vector> Matrix;
29+
typedef std::function<double()> RandFcn;
30+
struct Network {
31+
size_t inputCount;
32+
size_t hiddenCount;
33+
size_t outputCount;
34+
Vector weightsHidden;
35+
Vector biasesHidden;
36+
Vector weightsOutput;
37+
Vector biasesOutput;
38+
Vector Predict(const Vector &input) const;
39+
void Predict(const Vector &input, Vector &hidden, Vector &output) const;
40+
};
4041

41-
struct Trainer {
42-
Network network;
43-
Vector hidden;
44-
Vector output;
45-
Vector gradHidden;
46-
Vector gradOutput;
47-
static Trainer Create(Neural::Network&& network, size_t hiddenCount, size_t outputCount);
48-
static Trainer Create(size_t inputCount, size_t hiddenCount, size_t outputCount, std::function<double()> rand);
49-
void Train(const Vector& input, const Vector& output, double lr);
50-
};
51-
}
42+
struct Trainer {
43+
Network network;
44+
Vector hidden;
45+
Vector output;
46+
Vector gradHidden;
47+
Vector gradOutput;
48+
static Trainer Create(Neural::Network network);
49+
static Trainer Create(size_t inputCount, size_t hiddenCount,
50+
size_t outputCount, RandFcn rand);
51+
void Train(const Vector &input, const Vector &output, double lr);
52+
};
53+
} // namespace Neural
5254

5355
#endif

0 commit comments

Comments
 (0)