Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
D
dlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
钟尚武
dlib
Commits
6578c1b5
Commit
6578c1b5
authored
Jun 12, 2016
by
Davis King
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added net_to_xml()
parent
e2d4b3c4
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
328 additions
and
3 deletions
+328
-3
dnn.h
dlib/dnn.h
+1
-0
input.h
dlib/dnn/input.h
+13
-0
input_abstract.h
dlib/dnn/input_abstract.h
+6
-0
layers.h
dlib/dnn/layers.h
+166
-3
layers_abstract.h
dlib/dnn/layers_abstract.h
+6
-0
loss.h
dlib/dnn/loss.h
+14
-0
loss_abstract.h
dlib/dnn/loss_abstract.h
+6
-0
utilities.h
dlib/dnn/utilities.h
+82
-0
utilities_abstract.h
dlib/dnn/utilities_abstract.h
+34
-0
No files found.
dlib/dnn.h
View file @
6578c1b5
...
...
@@ -12,6 +12,7 @@
#include "dnn/trainer.h"
#include "dnn/cpu_dlib.h"
#include "dnn/tensor_tools.h"
#include "dnn/utilities.h"
#endif // DLIB_DNn_
...
...
dlib/dnn/input.h
View file @
6578c1b5
...
...
@@ -125,6 +125,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
input_rgb_image
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<input_rgb_image r='"
<<
item
.
avg_red
<<
"' g='"
<<
item
.
avg_green
<<
"' b='"
<<
item
.
avg_blue
<<
"'/>"
;
}
private
:
float
avg_red
;
float
avg_green
;
...
...
@@ -213,6 +218,10 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
input
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<input/>"
;
}
};
// ----------------------------------------------------------------------------------------
...
...
@@ -295,6 +304,10 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
input
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<input/>"
;
}
};
// ----------------------------------------------------------------------------------------
...
...
dlib/dnn/input_abstract.h
View file @
6578c1b5
...
...
@@ -91,6 +91,12 @@ namespace dlib
print a string describing this layer.
!*/
void
to_xml
(
const
EXAMPLE_INPUT_LAYER
&
item
,
std
::
ostream
&
out
);
/*!
This function is optional, but required if you want to print your networks with
net_to_xml(). Therefore, to_xml() prints a layer as XML.
!*/
void
serialize
(
const
EXAMPLE_INPUT_LAYER
&
item
,
std
::
ostream
&
out
);
void
deserialize
(
EXAMPLE_INPUT_LAYER
&
item
,
std
::
istream
&
in
);
/*!
...
...
dlib/dnn/layers.h
View file @
6578c1b5
...
...
@@ -262,6 +262,23 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
con_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<con"
<<
" num_filters='"
<<
_num_filters
<<
"'"
<<
" nr='"
<<
_nr
<<
"'"
<<
" nc='"
<<
_nc
<<
"'"
<<
" stride_y='"
<<
_stride_y
<<
"'"
<<
" stride_x='"
<<
_stride_x
<<
"'"
<<
" padding_y='"
<<
item
.
padding_y_
<<
"'"
<<
" padding_x='"
<<
item
.
padding_x_
<<
"'"
<<
" learning_rate_mult='"
<<
item
.
learning_rate_multiplier
<<
"'"
<<
" weight_decay_mult='"
<<
item
.
weight_decay_multiplier
<<
"'"
<<
" bias_learning_rate_mult='"
<<
item
.
bias_learning_rate_multiplier
<<
"'"
<<
" bias_weight_decay_mult='"
<<
item
.
bias_weight_decay_multiplier
<<
"'>
\n
"
;
out
<<
mat
(
item
.
params
);
out
<<
"</con>"
;
}
private
:
...
...
@@ -443,6 +460,18 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
max_pool_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<max_pool"
<<
" nr='"
<<
_nr
<<
"'"
<<
" nc='"
<<
_nc
<<
"'"
<<
" stride_y='"
<<
_stride_y
<<
"'"
<<
" stride_x='"
<<
_stride_x
<<
"'"
<<
" padding_y='"
<<
item
.
padding_y_
<<
"'"
<<
" padding_x='"
<<
item
.
padding_x_
<<
"'"
<<
"/>
\n
"
;
}
private
:
...
...
@@ -619,6 +648,18 @@ namespace dlib
<<
")"
;
return
out
;
}
friend
void
to_xml
(
const
avg_pool_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<avg_pool"
<<
" nr='"
<<
_nr
<<
"'"
<<
" nc='"
<<
_nc
<<
"'"
<<
" stride_y='"
<<
_stride_y
<<
"'"
<<
" stride_x='"
<<
_stride_x
<<
"'"
<<
" padding_y='"
<<
item
.
padding_y_
<<
"'"
<<
" padding_x='"
<<
item
.
padding_x_
<<
"'"
<<
"/>
\n
"
;
}
private
:
tt
::
pooling
ap
;
...
...
@@ -850,6 +891,28 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
bn_
&
item
,
std
::
ostream
&
out
)
{
if
(
mode
==
CONV_MODE
)
out
<<
"<bn_con"
;
else
out
<<
"<bn_fc"
;
out
<<
" eps='"
<<
item
.
eps
<<
"'"
;
out
<<
" learning_rate_mult='"
<<
item
.
learning_rate_multiplier
<<
"'"
;
out
<<
" weight_decay_mult='"
<<
item
.
weight_decay_multiplier
<<
"'"
;
out
<<
" bias_learning_rate_mult='"
<<
item
.
bias_learning_rate_multiplier
<<
"'"
;
out
<<
" bias_weight_decay_mult='"
<<
item
.
bias_weight_decay_multiplier
<<
"'"
;
out
<<
">
\n
"
;
out
<<
mat
(
item
.
params
);
if
(
mode
==
CONV_MODE
)
out
<<
"</bn_con>
\n
"
;
else
out
<<
"</bn_fc>
\n
"
;
}
private
:
friend
class
affine_
;
...
...
@@ -1053,6 +1116,32 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
fc_
&
item
,
std
::
ostream
&
out
)
{
if
(
bias_mode
==
FC_HAS_BIAS
)
{
out
<<
"<fc"
<<
" num_outputs='"
<<
item
.
num_outputs
<<
"'"
<<
" learning_rate_mult='"
<<
item
.
learning_rate_multiplier
<<
"'"
<<
" weight_decay_mult='"
<<
item
.
weight_decay_multiplier
<<
"'"
<<
" bias_learning_rate_mult='"
<<
item
.
bias_learning_rate_multiplier
<<
"'"
<<
" bias_weight_decay_mult='"
<<
item
.
bias_weight_decay_multiplier
<<
"'"
;
out
<<
">
\n
"
;
out
<<
mat
(
item
.
params
);
out
<<
"</fc>
\n
"
;
}
else
{
out
<<
"<fc_no_bias"
<<
" num_outputs='"
<<
item
.
num_outputs
<<
"'"
<<
" learning_rate_mult='"
<<
item
.
learning_rate_multiplier
<<
"'"
<<
" weight_decay_mult='"
<<
item
.
weight_decay_multiplier
<<
"'"
;
out
<<
">
\n
"
;
out
<<
mat
(
item
.
params
);
out
<<
"</fc_no_bias>
\n
"
;
}
}
private
:
unsigned
long
num_outputs
;
...
...
@@ -1167,6 +1256,13 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
dropout_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<dropout"
<<
" drop_rate='"
<<
item
.
drop_rate
<<
"'"
;
out
<<
"/>
\n
"
;
}
private
:
float
drop_rate
;
resizable_tensor
mask
;
...
...
@@ -1257,6 +1353,12 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
multiply_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<multiply"
<<
" val='"
<<
item
.
val
<<
"'"
;
out
<<
"/>
\n
"
;
}
private
:
float
val
;
resizable_tensor
params
;
// unused
...
...
@@ -1418,6 +1520,18 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
affine_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<affine"
;
if
(
item
.
mode
==
CONV_MODE
)
out
<<
" mode='conv'"
;
else
out
<<
" mode='fc'"
;
out
<<
">
\n
"
;
out
<<
mat
(
item
.
params
);
out
<<
"</affine>
\n
"
;
}
private
:
resizable_tensor
params
,
empty_params
;
alias_tensor
gamma
,
beta
;
...
...
@@ -1489,6 +1603,10 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
add_prev_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<add_prev tag='"
<<
id
<<
"'/>
\n
"
;
}
private
:
resizable_tensor
params
;
...
...
@@ -1573,6 +1691,10 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
relu_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<relu/>
\n
"
;
}
private
:
resizable_tensor
params
;
...
...
@@ -1652,6 +1774,13 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
prelu_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<prelu initial_param_value='"
<<
item
.
initial_param_value
<<
"'>
\n
"
;
out
<<
mat
(
item
.
params
);
out
<<
"</prelu>
\n
"
;
}
private
:
resizable_tensor
params
;
float
initial_param_value
;
...
...
@@ -1711,6 +1840,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
sig_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<sig/>
\n
"
;
}
private
:
resizable_tensor
params
;
...
...
@@ -1771,6 +1905,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
htan_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<htan/>
\n
"
;
}
private
:
resizable_tensor
params
;
...
...
@@ -1831,6 +1970,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
softmax_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<softmax/>
\n
"
;
}
private
:
resizable_tensor
params
;
};
...
...
@@ -1847,6 +1991,11 @@ namespace dlib
template
<
template
<
typename
>
class
TAG_TYPE
>
struct
concat_helper_impl
<
TAG_TYPE
>
{
constexpr
static
size_t
tag_count
()
{
return
1
;}
static
void
list_tags
(
std
::
ostream
&
out
)
{
out
<<
tag_id
<
TAG_TYPE
>::
id
;
}
template
<
typename
SUBNET
>
static
void
resize_out
(
resizable_tensor
&
out
,
const
SUBNET
&
sub
,
long
sum_k
)
{
...
...
@@ -1870,6 +2019,11 @@ namespace dlib
struct
concat_helper_impl
<
TAG_TYPE
,
TAG_TYPES
...
>
{
constexpr
static
size_t
tag_count
()
{
return
1
+
concat_helper_impl
<
TAG_TYPES
...
>::
tag_count
();}
static
void
list_tags
(
std
::
ostream
&
out
)
{
out
<<
tag_id
<
TAG_TYPE
>::
id
<<
","
;
concat_helper_impl
<
TAG_TYPES
...
>::
list_tags
(
out
);
}
template
<
typename
SUBNET
>
static
void
resize_out
(
resizable_tensor
&
out
,
const
SUBNET
&
sub
,
long
sum_k
)
...
...
@@ -1901,6 +2055,8 @@ namespace dlib
>
class
concat_
{
static
void
list_tags
(
std
::
ostream
&
out
)
{
impl
::
concat_helper_impl
<
TAG_TYPES
...
>::
list_tags
(
out
);};
public
:
constexpr
static
size_t
tag_count
()
{
return
impl
::
concat_helper_impl
<
TAG_TYPES
...
>::
tag_count
();};
...
...
@@ -1952,12 +2108,19 @@ namespace dlib
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
const
concat_
&
item
)
{
out
<<
"concat
\t
("
<<
tag_count
()
<<
")"
;
out
<<
"concat
\t
("
;
list_tags
(
out
);
out
<<
")"
;
return
out
;
}
friend
void
to_xml
(
const
concat_
&
item
,
std
::
ostream
&
out
)
{
out
<<
"<concat tags='"
;
list_tags
(
out
);
out
<<
"'/>
\n
"
;
}
private
:
resizable_tensor
params
;
// unused
};
...
...
dlib/dnn/layers_abstract.h
View file @
6578c1b5
...
...
@@ -324,6 +324,12 @@ namespace dlib
print a string describing this layer.
!*/
void
to_xml
(
const
EXAMPLE_COMPUTATIONAL_LAYER_
&
item
,
std
::
ostream
&
out
);
/*!
This function is optional, but required if you want to print your networks with
net_to_xml(). Therefore, to_xml() prints a layer as XML.
!*/
void
serialize
(
const
EXAMPLE_COMPUTATIONAL_LAYER_
&
item
,
std
::
ostream
&
out
);
void
deserialize
(
EXAMPLE_COMPUTATIONAL_LAYER_
&
item
,
std
::
istream
&
in
);
/*!
...
...
dlib/dnn/loss.h
View file @
6578c1b5
...
...
@@ -106,6 +106,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
loss_binary_hinge_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<loss_binary_hinge/>"
;
}
};
template
<
typename
SUBNET
>
...
...
@@ -215,6 +220,11 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
loss_binary_log_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<loss_binary_log/>"
;
}
};
template
<
typename
SUBNET
>
...
...
@@ -325,6 +335,10 @@ namespace dlib
return
out
;
}
friend
void
to_xml
(
const
loss_multiclass_log_
&
/*item*/
,
std
::
ostream
&
out
)
{
out
<<
"<loss_multiclass_log/>"
;
}
};
...
...
dlib/dnn/loss_abstract.h
View file @
6578c1b5
...
...
@@ -132,6 +132,12 @@ namespace dlib
print a string describing this layer.
!*/
void
to_xml
(
const
EXAMPLE_LOSS_LAYER_
&
item
,
std
::
ostream
&
out
);
/*!
This function is optional, but required if you want to print your networks with
net_to_xml(). Therefore, to_xml() prints a layer as XML.
!*/
void
serialize
(
const
EXAMPLE_LOSS_LAYER_
&
item
,
std
::
ostream
&
out
);
void
deserialize
(
EXAMPLE_LOSS_LAYER_
&
item
,
std
::
istream
&
in
);
/*!
...
...
dlib/dnn/utilities.h
0 → 100644
View file @
6578c1b5
// Copyright (C) 2016 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_DNn_UTILITIES_H_
#define DLIB_DNn_UTILITIES_H_
#include "core.h"
#include "utilities_abstract.h"
namespace
dlib
{
// ----------------------------------------------------------------------------------------
namespace
impl
{
class
visitor_net_to_xml
{
public
:
visitor_net_to_xml
(
std
::
ostream
&
out_
)
:
out
(
out_
)
{}
template
<
typename
input_layer_type
>
void
operator
()(
size_t
idx
,
const
input_layer_type
&
l
)
{
out
<<
"<layer idx='"
<<
idx
<<
"' type='input'>
\n
"
;
to_xml
(
l
,
out
);
out
<<
"</layer>
\n
"
;
}
template
<
typename
T
,
typename
U
>
void
operator
()(
size_t
idx
,
const
add_loss_layer
<
T
,
U
>&
l
)
{
out
<<
"<layer idx='"
<<
idx
<<
"' type='loss'>
\n
"
;
to_xml
(
l
.
loss_details
(),
out
);
out
<<
"</layer>
\n
"
;
}
template
<
typename
T
,
typename
U
,
typename
E
>
void
operator
()(
size_t
idx
,
const
add_layer
<
T
,
U
,
E
>&
l
)
{
out
<<
"<layer idx='"
<<
idx
<<
"' type='comp'>
\n
"
;
to_xml
(
l
.
layer_details
(),
out
);
out
<<
"</layer>
\n
"
;
}
template
<
unsigned
long
ID
,
typename
U
,
typename
E
>
void
operator
()(
size_t
idx
,
const
add_tag_layer
<
ID
,
U
,
E
>&
l
)
{
out
<<
"<layer idx='"
<<
idx
<<
"' type='tag' id='"
<<
ID
<<
"'/>
\n
"
;
}
template
<
template
<
typename
>
class
T
,
typename
U
>
void
operator
()(
size_t
idx
,
const
add_skip_layer
<
T
,
U
>&
l
)
{
out
<<
"<layer idx='"
<<
idx
<<
"' type='skip' id='"
<<
(
tag_id
<
T
>::
id
)
<<
"'/>
\n
"
;
}
private
:
std
::
ostream
&
out
;
};
}
template
<
typename
net_type
>
void
net_to_xml
(
const
net_type
&
net
,
std
::
ostream
&
out
)
{
out
<<
"<net>
\n
"
;
visit_layers
(
net
,
impl
::
visitor_net_to_xml
(
out
));
out
<<
"</net>
\n
"
;
}
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_DNn_UTILITIES_H_
dlib/dnn/utilities_abstract.h
0 → 100644
View file @
6578c1b5
// Copyright (C) 2016 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_DNn_UTILITIES_ABSTRACT_H_
#ifdef DLIB_DNn_UTILITIES_ABSTRACT_H_
#include "core_abstract.h"
namespace
dlib
{
// ----------------------------------------------------------------------------------------
template
<
typename
net_type
>
void
net_to_xml
(
const
net_type
&
net
,
std
::
ostream
&
out
);
/*!
requires
- net_type is an object of type add_layer, add_loss_layer, add_skip_layer, or
add_tag_layer.
- All layers in the net must provide to_xml() functions.
ensures
- Prints the given neural network object as an XML document to the given output
stream.
!*/
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_DNn_UTILITIES_ABSTRACT_H_
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment