FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
TensorFlow.NET/src/TensorFlowNET.Keras/Engine/Node.cs at master · feelsyt/TensorFlow.NET · GitHub
feelsyt
/
TensorFlow.NET
Public
forked from
SciSharp/TensorFlow.NET
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
TensorFlow.NET
/
src
/
TensorFlowNET.Keras
/
Engine
/
Node.cs
Copy path
More file actions
More file actions
Latest commit
History
History
History
113 lines (97 loc) · 3.91 KB
Breadcrumbs
TensorFlow.NET
/
src
/
TensorFlowNET.Keras
/
Engine
/
Node.cs
Copy path
File metadata and controls
113 lines (97 loc) · 3.91 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*****************************************************************************
Copyright 2018 The TensorFlow.NET Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
******************************************************************************/
using
System
.
Collections
.
Generic
;
using
System
.
Linq
;
using
Tensorflow
.
Keras
.
ArgsDefinition
;
using
static
Tensorflow
.
Binding
;
namespace
Tensorflow
.
Keras
.
Engine
{
/// <summary>
/// A `Node` describes the connectivity between two layers.
///
/// Each time a layer is connected to some new input,
/// a node is added to `layer._inbound_nodes`.
/// Each time the output of a layer is used by another layer,
/// a node is added to `layer._outbound_nodes`.
/// </summary>
public
partial
class
Node
:
INode
{
NodeArgs
args
;
public
Tensors
input_tensors
=>
is_input
?
Outputs
:
args
.
InputTensors
;
public
Tensors
Outputs
=>
args
.
Outputs
;
public
List
<
Tensor
>
KerasInputs
{
get
;
set
;
}
=
new
List
<
Tensor
>
(
)
;
ILayer
_layer
;
public
ILayer
Layer
=>
_layer
;
public
bool
is_input
=>
args
.
InputTensors
==
null
;
public
INode
[
]
ParentNodes
{
get
{
var
node_deps
=
new
List
<
INode
>
(
)
;
foreach
(
var
kt
in
KerasInputs
)
{
var
(
layer
,
node_index
,
_
)
=
kt
.
KerasHistory
;
if
(
layer
!=
null
)
node_deps
.
append
(
layer
.
InboundNodes
[
node_index
]
)
;
}
return
node_deps
.
ToArray
(
)
;
}
}
public
Node
(
NodeArgs
args
)
{
this
.
args
=
args
;
}
public
void
Connect
(
Layer
layer
)
{
_layer
=
layer
;
if
(
args
.
InputTensors
!=
null
)
KerasInputs
.
AddRange
(
args
.
InputTensors
)
;
// Wire up Node to Layers.
layer
.
InboundNodes
.
Add
(
this
)
;
foreach
(
var
kt
in
KerasInputs
)
{
if
(
kt
.
KerasHistory
==
null
)
continue
;
var
(
inbound_layer
,
_
,
_
)
=
kt
.
KerasHistory
;
if
(
inbound_layer
!=
null
)
inbound_layer
.
OutboundNodes
.
Add
(
this
)
;
}
// Set metadata on outputs.
var
node_index
=
layer
.
InboundNodes
.
Count
-
1
;
foreach
(
var
(
i
,
tensor
)
in
enumerate
(
Outputs
)
)
tensor
.
KerasHistory
=
new
KerasHistory
(
layer
,
node_index
,
i
)
;
}
/// <summary>
/// Maps Keras Tensors to computed Tensors using `tensor_dict`.
/// </summary>
/// <param name="tensor_dict"></param>
/// <returns></returns>
public
Tensors
MapArguments
(
Dictionary
<
long
,
Queue
<
Tensor
>
>
tensor_dict
)
{
if
(
KerasInputs
.
Count
(
)
==
1
)
{
var
kt_id
=
KerasInputs
[
0
]
.
Id
;
return
tensor_dict
[
kt_id
]
.
Dequeue
(
)
;
}
else
{
var
flat_arguments
=
KerasInputs
.
Select
(
x
=>
x
)
.
ToArray
(
)
;
foreach
(
var
(
kt_index
,
kt
)
in
enumerate
(
KerasInputs
)
)
flat_arguments
[
kt_index
]
=
tensor_dict
[
kt
.
Id
]
.
Dequeue
(
)
;
return
flat_arguments
;
}
}
public
override
string
ToString
(
)
=>
$
"
{
Layer
.
Name
}
,
{
KerasInputs
.
Count
}
inputs:
{
string
.
Join
(
","
,
KerasInputs
.
Select
(
x
=>
x
.
name
)
)
}
"
;
}
}
Back
|
FazBrowse Home
|
New Git URL