Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Abdelwahab HEBA
kaldi_2015
Commits
68db7411
Commit
68db7411
authored
Jul 22, 2015
by
Daniel Povey
Browse files
Merge pull request #9 from vijayaditya/multilang-bugfix
Multilang bugfix
parents
36cad857
18057466
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
58 additions
and
15 deletions
+58
-15
src/nnet2/nnet-component.cc
src/nnet2/nnet-component.cc
+14
-0
src/nnet2/nnet-component.h
src/nnet2/nnet-component.h
+5
-2
src/nnet2/nnet-nnet.cc
src/nnet2/nnet-nnet.cc
+39
-13
No files found.
src/nnet2/nnet-component.cc
View file @
68db7411
...
...
@@ -1407,6 +1407,20 @@ Component *AffineComponent::CollapseWithNext(
return
ans
;
}
Component
*
AffineComponent
::
CollapseWithNext
(
const
FixedScaleComponent
&
next_component
)
const
{
KALDI_ASSERT
(
this
->
OutputDim
()
==
next_component
.
InputDim
());
AffineComponent
*
ans
=
dynamic_cast
<
AffineComponent
*>
(
this
->
Copy
());
KALDI_ASSERT
(
ans
!=
NULL
);
ans
->
linear_params_
.
MulRowsVec
(
next_component
.
scales_
);
ans
->
bias_params_
.
MulElements
(
next_component
.
scales_
);
return
ans
;
}
Component
*
AffineComponent
::
CollapseWithPrevious
(
const
FixedAffineComponent
&
prev_component
)
const
{
// If at least one was non-updatable, make the whole non-updatable.
...
...
src/nnet2/nnet-component.h
View file @
68db7411
...
...
@@ -709,6 +709,7 @@ class ScaleComponent: public Component {
class
SumGroupComponent
;
// Forward declaration.
class
AffineComponent
;
// Forward declaration.
class
FixedScaleComponent
;
// Forward declaration.
class
SoftmaxComponent
:
public
NonlinearComponent
{
public:
...
...
@@ -803,6 +804,7 @@ class AffineComponent: public UpdatableComponent {
// FixedLinearComponent yet.
Component
*
CollapseWithNext
(
const
AffineComponent
&
next
)
const
;
Component
*
CollapseWithNext
(
const
FixedAffineComponent
&
next
)
const
;
Component
*
CollapseWithNext
(
const
FixedScaleComponent
&
next
)
const
;
Component
*
CollapseWithPrevious
(
const
FixedAffineComponent
&
prev
)
const
;
virtual
std
::
string
Info
()
const
;
...
...
@@ -1473,6 +1475,7 @@ class FixedScaleComponent: public Component {
virtual
void
Write
(
std
::
ostream
&
os
,
bool
binary
)
const
;
protected:
friend
class
AffineComponent
;
// necessary for collapse
CuVector
<
BaseFloat
>
scales_
;
KALDI_DISALLOW_COPY_AND_ASSIGN
(
FixedScaleComponent
);
};
...
...
src/nnet2/nnet-nnet.cc
View file @
68db7411
...
...
@@ -51,7 +51,6 @@ int32 Nnet::LeftContext() const {
// non-negative left context. In addition, the NnetExample also stores data
// left context as positive integer. To be compatible with these other classes
// Nnet::LeftContext() returns a non-negative left context.
}
int32
Nnet
::
RightContext
()
const
{
...
...
@@ -66,8 +65,8 @@ int32 Nnet::RightContext() const {
void
Nnet
::
ComputeChunkInfo
(
int32
input_chunk_size
,
int32
num_chunks
,
std
::
vector
<
ChunkInfo
>
*
chunk_info_out
)
const
{
// First compute the output-chunk indices for the last component in the
network.
// we assume that the numbering of the input starts from zero.
// First compute the output-chunk indices for the last component in the
//
network.
we assume that the numbering of the input starts from zero.
int32
output_chunk_size
=
input_chunk_size
-
LeftContext
()
-
RightContext
();
KALDI_ASSERT
(
output_chunk_size
>
0
);
std
::
vector
<
int32
>
current_output_inds
;
...
...
@@ -137,7 +136,6 @@ void Nnet::ComputeChunkInfo(int32 input_chunk_size,
(
*
chunk_info_out
)[
i
].
Check
();
// (*chunk_info_out)[i].ToString();
}
}
const
Component
&
Nnet
::
GetComponent
(
int32
component
)
const
{
...
...
@@ -359,7 +357,8 @@ void Nnet::ResizeOutputLayer(int32 new_num_pdfs) {
KALDI_ASSERT
(
new_num_pdfs
>
0
);
KALDI_ASSERT
(
NumComponents
()
>
2
);
int32
nc
=
NumComponents
();
SumGroupComponent
*
sgc
=
dynamic_cast
<
SumGroupComponent
*>
(
components_
[
nc
-
1
]);
SumGroupComponent
*
sgc
=
dynamic_cast
<
SumGroupComponent
*>
(
components_
[
nc
-
1
]);
if
(
sgc
!=
NULL
)
{
// Remove it. We'll resize things later.
delete
sgc
;
...
...
@@ -367,21 +366,47 @@ void Nnet::ResizeOutputLayer(int32 new_num_pdfs) {
components_
.
begin
()
+
nc
);
nc
--
;
}
SoftmaxComponent
*
sc
;
if
((
sc
=
dynamic_cast
<
SoftmaxComponent
*>
(
components_
[
nc
-
1
]))
==
NULL
)
KALDI_ERR
<<
"Expected last component to be SoftmaxComponent."
;
// check if nc-1 has a FixedScaleComponent
bool
has_fixed_scale_component
=
false
;
int32
fixed_scale_component_index
=
-
1
;
int32
final_affine_component_index
=
nc
-
2
;
int32
softmax_component_index
=
nc
-
1
;
FixedScaleComponent
*
fsc
=
dynamic_cast
<
FixedScaleComponent
*>
(
components_
[
final_affine_component_index
]);
if
(
fsc
!=
NULL
)
{
has_fixed_scale_component
=
true
;
fixed_scale_component_index
=
nc
-
2
;
final_affine_component_index
=
nc
-
3
;
}
// note: it could be child class of AffineComponent.
AffineComponent
*
ac
=
dynamic_cast
<
AffineComponent
*>
(
components_
[
nc
-
2
]);
AffineComponent
*
ac
=
dynamic_cast
<
AffineComponent
*>
(
components_
[
final_affine_component_index
]);
if
(
ac
==
NULL
)
KALDI_ERR
<<
"Network doesn't have expected structure (didn't find final "
<<
"AffineComponent)."
;
if
(
has_fixed_scale_component
)
{
// collapse the fixed_scale_component with the affine_component before it
AffineComponent
*
ac_new
=
dynamic_cast
<
AffineComponent
*>
(
ac
->
CollapseWithNext
(
*
fsc
));
KALDI_ASSERT
(
ac_new
!=
NULL
);
delete
fsc
;
delete
ac
;
components_
.
erase
(
components_
.
begin
()
+
fixed_scale_component_index
,
components_
.
begin
()
+
(
fixed_scale_component_index
+
1
));
components_
[
final_affine_component_index
]
=
ac_new
;
ac
=
ac_new
;
softmax_component_index
=
softmax_component_index
-
1
;
}
ac
->
Resize
(
ac
->
InputDim
(),
new_num_pdfs
);
// Remove the softmax component, and replace it with a new one
delete
components_
[
nc
-
1
];
components_
[
nc
-
1
]
=
new
SoftmaxComponent
(
new_num_pdfs
);
delete
components_
[
softmax_component_index
];
components_
[
softmax_component_index
]
=
new
SoftmaxComponent
(
new_num_pdfs
);
this
->
SetIndexes
();
// used for debugging
this
->
Check
();
}
...
...
@@ -655,7 +680,8 @@ void Nnet::Vectorize(VectorBase<BaseFloat> *params) const {
KALDI_ASSERT
(
offset
==
GetParameterDim
());
}
void
Nnet
::
ResetGenerators
()
{
// resets random-number generators for all random
void
Nnet
::
ResetGenerators
()
{
// resets random-number generators for all random
// components.
for
(
int32
c
=
0
;
c
<
NumComponents
();
c
++
)
{
RandomComponent
*
rc
=
dynamic_cast
<
RandomComponent
*>
(
...
...
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