Skip to content

Commit 552b4db

Browse files
committed
improved performance
1 parent 7fc2c1a commit 552b4db

8 files changed

Lines changed: 45 additions & 23 deletions

File tree

include/network/INetwork.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "../src/model/optimizers.hpp"
55
#include "IvisualNetwork.hpp"
66
#include "tensor.hpp"
7+
#include <vector>
78

89
namespace nn::model {
910
class INetwork {
@@ -23,7 +24,7 @@ class INetwork {
2324
virtual const global::Tensor &getInput() const = 0;
2425
virtual std::shared_ptr<visualizer::IVisualNetwork> getVisual() = 0;
2526

26-
virtual global::Tensor getParams() const = 0;
27+
virtual std::vector<global::ValueType> getParams() const = 0;
2728
virtual void setParams(const global::Tensor params) = 0;
2829

2930
virtual void setTraining(const bool state) = 0;

src/model/model.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#include "../networks/cnn/CNNetwork.hpp"
22
#include "../networks/fnn/FNNetwork.hpp"
33
#include "dataBase.hpp"
4+
#include "tensor_gpu.hpp"
45
#include <chrono>
56
#include <fstream>
67
#include <iostream>
78
#include <model.hpp>
9+
#include <string>
10+
#include <vector>
811

912
namespace nn::visualizer {
1013
void ProgressBar::printBar() {
@@ -104,7 +107,7 @@ void Model::initModel() {
104107
addCNN(WIDTH, _config);
105108
}
106109

107-
param_amount += network[i]->getParams().numElements();
110+
// param_amount += network[i]->getParams().numElements();
108111
}
109112

110113
std::cout << "initialize model - "
@@ -432,11 +435,11 @@ void Model::save(const std::string &file, bool print) {
432435
}
433436

434437
for (size_t i = 0; i < network.size(); ++i) {
435-
global::Tensor params = network[i]->getParams();
438+
std::vector<global::ValueType> params = network[i]->getParams();
436439

437-
outFile << params.numElements() << " ";
438-
for (size_t j = 0; j < params.numElements(); ++j) {
439-
outFile << params.getValue({j}) << " ";
440+
outFile << params.size() << " ";
441+
for (size_t j = 0; j < params.size(); ++j) {
442+
outFile << params[j] << " ";
440443
}
441444
outFile << std::endl;
442445
}

src/networks/cnn/CNNetwork.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "CNNetwork.hpp"
22
#include "tensor.hpp"
33
#include <cstddef>
4+
#include <vector>
45

56
namespace nn::model::cnn {
67
CNNetwork::CNNetwork(
@@ -48,8 +49,8 @@ void CNNetwork::updateWeights(IOptimizer &) {
4849
void CNNetwork::calculateInputDelta(const global::Tensor &) {
4950
}
5051

51-
global::Tensor CNNetwork::getParams() const {
52-
return input;
52+
std::vector<global::ValueType> CNNetwork::getParams() const {
53+
return std::vector<global::ValueType>();
5354
}
5455

5556
void CNNetwork::setParams(const global::Tensor) {

src/networks/cnn/CNNetwork.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "tensor.hpp"
66
#include <memory>
77
#include <network/INetwork.hpp>
8+
#include <vector>
89

910
namespace nn::model::cnn {
1011
class CNNetwork : public INetwork {
@@ -38,7 +39,7 @@ class CNNetwork : public INetwork {
3839

3940
std::shared_ptr<visualizer::IVisualNetwork> getVisual() override { return visual; }
4041

41-
global::Tensor getParams() const override;
42+
std::vector<global::ValueType> getParams() const override;
4243
void setParams(const global::Tensor params) override;
4344

4445
void setTraining(const bool state) override;

src/networks/fnn/DenseLayer.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,28 @@ void DenseLayer::updateWeight(nn::model::IOptimizer &optimizer) {
128128
optimizer.step(parameters.weights, gradients.weights);
129129
}
130130

131-
const global::Tensor DenseLayer::getData() const {
131+
const std::vector<global::ValueType> DenseLayer::getData() const {
132132
size_t weightsSize = parameters.weights.numElements();
133133
size_t biasesSize = parameters.biases.numElements();
134134

135-
global::Tensor matrix({weightsSize + biasesSize});
135+
std::vector<global::ValueType> matrix(weightsSize + biasesSize);
136136

137-
// Copy weights
138-
matrix.insertRange(parameters.weights, 0, 0, weightsSize);
137+
std::vector<global::ValueType> temp(parameters.weights.numElements());
138+
parameters.weights.getData(temp);
139+
140+
size_t j = 0;
141+
for (size_t i = 0; i < temp.size(); ++i) {
142+
matrix[j] = temp[i];
143+
++j;
144+
}
139145

140-
// Copy biases
141-
matrix.insertRange(parameters.biases, 0, weightsSize, biasesSize);
146+
temp.resize(parameters.biases.numElements());
147+
parameters.biases.getData(temp);
148+
149+
for (size_t i = 0; i < temp.size(); ++i) {
150+
matrix[j] = temp[i];
151+
++j;
152+
}
142153

143154
return matrix;
144155
}

src/networks/fnn/DenseLayer.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "../src/model/optimizers.hpp"
55
#include <Globals.hpp>
6+
#include <vector>
67

78
namespace nn::model::fnn {
89
constexpr global::ValueType MIN_LOSS_VALUE = 1e-10;
@@ -70,7 +71,7 @@ class DenseLayer {
7071

7172
size_t getParamCount() const;
7273

73-
const global::Tensor getData() const;
74+
const std::vector<global::ValueType> getData() const;
7475
void setData(const global::Tensor newParam, const size_t offset);
7576

7677
void setTraining(const bool state) { isTraining = state; }

src/networks/fnn/FNNetwork.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "FNNetwork.hpp"
22
#include "tensor.hpp"
3+
#include <vector>
34

45
namespace nn::model::fnn {
56
FNNetwork::FNNetwork(
@@ -149,16 +150,18 @@ size_t FNNetwork::getParamCount() const {
149150
return count;
150151
}
151152

152-
global::Tensor FNNetwork::getParams() const {
153-
global::Tensor matrix({getParamCount()});
153+
std::vector<global::ValueType> FNNetwork::getParams() const {
154+
std::vector<global::ValueType> matrix(getParamCount());
154155

155156
size_t matrixI = 0;
156157

157158
for (size_t i = 0; i < layers.size(); ++i) {
158-
global::Tensor params = layers[i]->getData();
159+
std::vector<global::ValueType> params = layers[i]->getData();
159160

160-
matrix.insertRange(params, 0, matrixI, params.numElements());
161-
matrixI += params.numElements();
161+
for (size_t j = 0; j < params.size(); ++j) {
162+
matrix[matrixI] = params[j];
163+
++matrixI;
164+
}
162165
}
163166

164167
return matrix;
@@ -168,7 +171,7 @@ void FNNetwork::setParams(const global::Tensor params) {
168171
size_t j = 0;
169172
for (size_t i = 0; i < layers.size(); ++i) {
170173
layers[i]->setData(params, j);
171-
j += layers[i]->getParamCount();
174+
j += layers[i]->getParamCount();
172175

173176
if (visual) {
174177
visual->setParam(i, layers[i]->getParms());

src/networks/fnn/FNNetwork.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "FnnVisualizer.hpp"
55
#include <network/INetwork.hpp>
6+
#include <vector>
67

78
namespace nn::model::fnn {
89
class FNNetwork : public INetwork {
@@ -44,7 +45,7 @@ class FNNetwork : public INetwork {
4445
return visual;
4546
}
4647

47-
global::Tensor getParams() const override;
48+
std::vector<global::ValueType> getParams() const override;
4849
void setParams(const global::Tensor params) override;
4950

5051
size_t getParamCount() const;

0 commit comments

Comments
 (0)