Skip to content

Commit 3593b67

Browse files
author
NeiroYT
committed
Changed logic
1 parent aca6e0b commit 3593b67

File tree

5 files changed

+149
-18
lines changed

5 files changed

+149
-18
lines changed

include/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
file(GLOB_RECURSE graph_headers graph/*.h graph/*.hpp)
22
set(GRAPH_HEADERS "${graph_headers}" PARENT_SCOPE)
33

4-
file(GLOB_RECURSE graphT_headers graph_transformations/*.h graph_transformation/*.hpp)
4+
file(GLOB_RECURSE graphT_headers graph_transformations/*.h graph_transformations/*.hpp)
55
set(GRAPHT_HEADERS "${graphT_headers}" PARENT_SCOPE)
66

77
file(GLOB_RECURSE layers_headers layers/*.h layers/*.hpp)

src/graph_transformations/graph_transformations.cpp

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "graph/graph_transformations.hpp"
1+
#include "graph_transformations/graph_transformations.hpp"
22

33
namespace it_lab_ai {
44

@@ -21,17 +21,27 @@ bool layer_conditions(const Layer& layer, const Layer& layer_sub) {
2121
return layer.getName() == layer_sub.getName();
2222
}
2323

24+
//void erase_inequality_for_first(
25+
// std::vector<std::pair<int, LayerType>>& vec1,
26+
// const std::vector<std::pair<int, LayerType>>& vec2) {
27+
// for (int i = 0; i < std::min(vec1.size(), vec2.size()); i++) {
28+
// if (vec1[i].second != vec2[i].second) {
29+
// vec1.erase(vec1.begin() + i);
30+
// }
31+
// }
32+
// if (vec1.size() > vec2.size()) {
33+
// vec1.resize(vec2.size());
34+
// }
35+
//}
36+
2437
bool check_child(const Graph& graph, const Graph& subgraph, int i, int iter) {
25-
int amount_connected1 =
26-
(i < graph.getLayersCount() - 1)
27-
? (graph.getVertexValue(i + 1) - graph.getVertexValue(i))
28-
: 0;
38+
int amount_connected1 = graph.getVertexValue(i + 1) - graph.getVertexValue(i);
2939
int amount_connected2 =
30-
(iter < subgraph.getLayersCount() - 1)
31-
? (subgraph.getVertexValue(iter + 1) - subgraph.getVertexValue(iter))
32-
: 0;
33-
if ((amount_connected2 != 0 && amount_connected1 != amount_connected2) ||
34-
!layer_conditions(*graph.getLayerFromID(i),
40+
subgraph.getVertexValue(iter + 1) - subgraph.getVertexValue(iter);
41+
if (amount_connected1 != amount_connected2 && amount_connected2 != 0) {
42+
return false;
43+
}
44+
if (!layer_conditions(*graph.getLayerFromID(i),
3545
*subgraph.getLayerFromID(iter))) {
3646
return false;
3747
}
@@ -53,13 +63,20 @@ bool check_child(const Graph& graph, const Graph& subgraph, int i, int iter) {
5363
}
5464
std::sort(orderA.begin(), orderA.end(),
5565
[&](id_name a1, id_name a2) { return a1.second < a2.second; });
66+
std::sort(orderB.begin(), orderB.end(),
67+
[&](id_name a1, id_name a2) { return a1.second < a2.second; });
5668
// ^ interested in LayerType order to prevent any shuffling for childs
69+
//if (first_inequally) {
70+
// erase_inequality_for_first(orderA, orderB);
71+
//}
5772
for (int j = 0; j < amount_connected1; j++) {
58-
if (graph.getInputsSize(j) != subgraph.getInputsSize(iter)) {
73+
int id1 = graph.getEdgeValue(graph.getVertexValue(i) + j);
74+
int id2 = subgraph.getEdgeValue(subgraph.getVertexValue(iter) + j);
75+
if (graph.getInputsSize(id1) != subgraph.getInputsSize(id2)) {
5976
return false;
6077
}
6178
bool temp =
62-
check_child(graph, subgraph, orderA[j].first, orderB[j].second);
79+
check_child(graph, subgraph, orderA[j].first, orderB[j].first);
6380
if (!temp) {
6481
return false;
6582
}
@@ -68,4 +85,4 @@ bool check_child(const Graph& graph, const Graph& subgraph, int i, int iter) {
6885
return true;
6986
}
7087

71-
} // namespace it_lab_ai
88+
} // namespace it_lab_ai

test/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ target_link_libraries(run_test PUBLIC perf_lib layers_lib)
88
target_link_libraries(run_test PUBLIC gtest)
99
target_link_libraries(run_test PUBLIC ReadLib)
1010
target_link_libraries(run_test PUBLIC reader_lib)
11+
target_link_libraries(run_test PUBLIC graph_lib)
12+
target_link_libraries(run_test PUBLIC graphT_lib)
1113

1214

1315
target_include_directories(run_test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")

test/benchmarking/test_layers_time.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void test_func(Layer& p, const Tensor& input, Tensor& output) {
1717
}
1818

1919
TEST(pooling_test, is_pooling_tbb_ok) {
20-
size_t n = 5;
20+
size_t n = 1;
2121
size_t c = 3;
2222
size_t h = 224;
2323
size_t w = 224;
@@ -38,7 +38,7 @@ TEST(pooling_test, is_pooling_tbb_ok) {
3838
}
3939

4040
TEST(conv_test, is_conv_stl_ok) {
41-
size_t n = 5;
41+
size_t n = 1;
4242
size_t c = 3;
4343
size_t h = 224;
4444
size_t w = 224;

test/graph/test_graph.cpp

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <vector>
22

33
#include "graph/graph.hpp"
4-
#include "graph/graph_transformations.hpp"
4+
#include "graph_transformations/graph_transformations.hpp"
55
#include "gtest/gtest.h"
66
#include "layers/EWLayer.hpp"
77
#include "layers/FCLayer.hpp"
@@ -141,5 +141,117 @@ TEST(graph_transformations, check_subgraphs_search) {
141141
subgraph.setInput(fcLayer, input);
142142
subgraph.makeConnection(fcLayer, fcLayer2);
143143

144-
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>(1, 1));
144+
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>({1}));
145+
}
146+
147+
TEST(graph_transformations, check_subgraphs_search1) {
148+
const std::vector<float> vec1 = {2.0F, 1.5F, 0.1F, 1.9F, 0.0F, 5.5F};
149+
Tensor weights = make_tensor<float>(vec1, {3, 2});
150+
Tensor bias = make_tensor<float>({0.5F, 0.5F, 1.0F});
151+
Tensor input = make_tensor<float>({1.0F, 2.0F}, {2});
152+
Tensor output;
153+
154+
Graph graph(5);
155+
Graph subgraph(2);
156+
FCLayer fcLayer(weights, bias);
157+
FCLayer fcLayer2(weights, bias);
158+
FCLayer fcLayer3(weights, bias);
159+
FCLayer fcLayer4(weights, bias);
160+
FCLayer fcLayer5(weights, bias);
161+
162+
graph.setInput(fcLayer, input);
163+
graph.makeConnection(fcLayer, fcLayer2);
164+
graph.makeConnection(fcLayer2, fcLayer3);
165+
graph.makeConnection(fcLayer, fcLayer4);
166+
graph.makeConnection(fcLayer4, fcLayer5);
167+
graph.setOutput(fcLayer5, output);
168+
169+
subgraph.setInput(fcLayer, input);
170+
subgraph.makeConnection(fcLayer, fcLayer2);
171+
172+
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>({1, 3}));
173+
}
174+
175+
TEST(graph_transformations, check_subgraphs_search2) {
176+
const std::vector<float> vec1 = {2.0F, 1.5F, 0.1F, 1.9F, 0.0F, 5.5F};
177+
Tensor weights = make_tensor<float>(vec1, {3, 2});
178+
Tensor bias = make_tensor<float>({0.5F, 0.5F, 1.0F});
179+
Tensor input = make_tensor<float>({1.0F, 2.0F}, {2});
180+
Tensor output;
181+
182+
Graph graph(5);
183+
Graph subgraph(2);
184+
FCLayer fcLayer(weights, bias);
185+
FCLayer fcLayer2(weights, bias);
186+
FCLayer fcLayer3(weights, bias);
187+
FCLayer fcLayer4(weights, bias);
188+
189+
graph.setInput(fcLayer, input);
190+
graph.makeConnection(fcLayer, fcLayer2);
191+
graph.makeConnection(fcLayer2, fcLayer3);
192+
graph.makeConnection(fcLayer3, fcLayer);
193+
graph.makeConnection(fcLayer3, fcLayer4);
194+
graph.setOutput(fcLayer4, output);
195+
196+
subgraph.setInput(fcLayer, input);
197+
subgraph.makeConnection(fcLayer, fcLayer2);
198+
subgraph.makeConnection(fcLayer2, fcLayer3);
199+
200+
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>({0}));
201+
}
202+
203+
TEST(graph_transformations, check_subgraphs_search3) {
204+
const std::vector<float> vec1 = {2.0F, 1.5F, 0.1F, 1.9F, 0.0F, 5.5F};
205+
Tensor weights = make_tensor<float>(vec1, {3, 2});
206+
Tensor bias = make_tensor<float>({0.5F, 0.5F, 1.0F});
207+
Tensor input = make_tensor<float>({1.0F, 2.0F}, {2});
208+
Tensor output;
209+
210+
Graph graph(5);
211+
Graph subgraph(2);
212+
FCLayer fcLayer(weights, bias);
213+
FCLayer fcLayer2(weights, bias);
214+
FCLayer fcLayer3(weights, bias);
215+
FCLayer fcLayer4(weights, bias);
216+
217+
graph.setInput(fcLayer, input);
218+
graph.makeConnection(fcLayer, fcLayer2);
219+
graph.makeConnection(fcLayer2, fcLayer3);
220+
graph.makeConnection(fcLayer3, fcLayer);
221+
graph.makeConnection(fcLayer2, fcLayer4);
222+
graph.setOutput(fcLayer4, output);
223+
224+
subgraph.setInput(fcLayer, input);
225+
subgraph.makeConnection(fcLayer, fcLayer2);
226+
subgraph.makeConnection(fcLayer2, fcLayer3);
227+
228+
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>({2}));
229+
}
230+
231+
TEST(graph_transformations, check_subgraphs_search4) {
232+
const std::vector<float> vec1 = {2.0F, 1.5F, 0.1F, 1.9F, 0.0F, 5.5F};
233+
Tensor weights = make_tensor<float>(vec1, {3, 2});
234+
Tensor bias = make_tensor<float>({0.5F, 0.5F, 1.0F});
235+
Tensor input = make_tensor<float>({1.0F, 2.0F}, {2});
236+
Tensor output;
237+
238+
Graph graph(5);
239+
Graph subgraph(2);
240+
FCLayer fcLayer(weights, bias);
241+
FCLayer fcLayer2(weights, bias);
242+
FCLayer fcLayer3(weights, bias);
243+
FCLayer fcLayer4(weights, bias);
244+
245+
graph.setInput(fcLayer, input);
246+
graph.makeConnection(fcLayer, fcLayer2);
247+
graph.makeConnection(fcLayer2, fcLayer3);
248+
graph.makeConnection(fcLayer3, fcLayer);
249+
graph.makeConnection(fcLayer, fcLayer4);
250+
graph.setOutput(fcLayer4, output);
251+
252+
subgraph.setInput(fcLayer, input);
253+
subgraph.makeConnection(fcLayer, fcLayer2);
254+
subgraph.makeConnection(fcLayer2, fcLayer3);
255+
256+
ASSERT_EQ(find_subgraphs(graph, subgraph), std::vector<int>({1}));
145257
}

0 commit comments

Comments
 (0)