forked from SciSharp/TensorFlow.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtf_utils.cs
More file actions
98 lines (86 loc) · 3.26 KB
/
tf_utils.cs
File metadata and controls
98 lines (86 loc) · 3.26 KB
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
/*****************************************************************************
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;
using System.Linq;
using Tensorflow.Framework;
using Tensorflow.Framework.Models;
namespace Tensorflow.Keras.Utils
{
public class tf_utils
{
public static bool are_all_symbolic_tensors(Tensor[] tensors)
{
return tensors.Select(x => is_symbolic_tensor(x)).Count() == tensors.Length;
}
public static bool? constant_value(Tensor pred)
{
return smart_module.smart_constant_value(pred);
}
public static bool is_symbolic_tensor(Tensor tensor)
{
return true;
}
public static Tensor[] smart_cond<T>(IVariableV1 pred,
Func<T[]> true_fn = null,
Func<T[]> false_fn = null,
string name = null)
{
return control_flow_ops.cond(pred.AsTensor(),
true_fn: true_fn,
false_fn: false_fn,
name: name);
}
public static Tensor[] smart_cond<T>(Tensor pred,
Func<T[]> true_fn = null,
Func<T[]> false_fn = null,
string name = null)
{
return smart_module.smart_cond(pred,
true_fn: true_fn,
false_fn: false_fn,
name: name);
}
public static Tensor smart_cond(bool pred,
Func<Tensor> true_fn = null,
Func<Tensor> false_fn = null,
string name = null)
{
return smart_module.smart_cond(pred,
true_fn: true_fn,
false_fn: false_fn,
name: name);
}
public static TensorSpec get_tensor_spec(Tensor t, bool dynamic_batch = false, string name = null)
{
throw new NotImplementedException("The function is waited to be implemented in the future.");
}
public static TensorSpec get_tensor_spec(TensorSpec t, bool dynamic_batch = false, string name = null)
{
var spec = t;
if (!dynamic_batch)
{
return spec;
}
var dynamic_batch_spec = new TensorSpec(t.shape, t.dtype, t.name);
var shape = dynamic_batch_spec.shape;
if(shape.rank > 0)
{
var shape_list = shape.as_int_list();
// TODO(Rinne): check if -1 is equivalent to None in python.
shape_list[0] = -1;
dynamic_batch_spec.shape = new Shape(shape_list);
}
return dynamic_batch_spec;
}
}
}