Skip to content

Commit f3da1cd

Browse files
Added unit tests for Conv2D
1 parent 3a2b270 commit f3da1cd

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
lines changed

src/TensorFlowNET.Keras/Layers/LayersApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public BatchNormalization BatchNormalization(int axis = -1,
6666
Trainable = trainable,
6767
Name = name
6868
});
69-
69+
#if false
7070
/// <summary>
7171
/// 2D convolution layer (e.g. spatial convolution over images).
7272
/// This layer creates a convolution kernel that is convolved with the layer input to produce a tensor of outputs.
@@ -119,6 +119,7 @@ public Conv2D Conv2D(int filters,
119119
ActivityRegularizer = activity_regularizer,
120120
Activation = activation ?? keras.activations.Linear
121121
});
122+
#endif
122123

123124
/// <summary>
124125
/// 2D convolution layer (e.g. spatial convolution over images).
@@ -158,7 +159,7 @@ public Conv2D Conv2D(int filters,
158159
{
159160
Rank = 2,
160161
Filters = filters,
161-
KernelSize = kernel_size,
162+
KernelSize = (kernel_size == null) ? (5,5) : kernel_size,
162163
Strides = strides == null ? (1, 1) : strides,
163164
Padding = padding,
164165
DataFormat = data_format,
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using NumSharp;
3+
using Tensorflow;
4+
using static Tensorflow.KerasApi;
5+
6+
namespace TensorFlowNET.Keras.UnitTest
7+
{
8+
[TestClass]
9+
public class LayersConvolutionTest : EagerModeTestBase
10+
{
11+
[TestMethod]
12+
public void BasicConv2D()
13+
{
14+
var filters = 8;
15+
var conv = keras.layers.Conv2D(filters);
16+
17+
var x = np.arange(256.0f).reshape(1,8,8,4);
18+
var y = conv.Apply(x);
19+
20+
Assert.AreEqual(4, y.shape.ndim);
21+
Assert.AreEqual(x.shape[0], y.shape[0]);
22+
Assert.AreEqual(x.shape[1] - 4, y.shape[1]);
23+
Assert.AreEqual(x.shape[2] - 4, y.shape[2]);
24+
Assert.AreEqual(filters, y.shape[3]);
25+
}
26+
27+
[TestMethod]
28+
public void BasicConv2D_ksize()
29+
{
30+
var filters = 8;
31+
var conv = keras.layers.Conv2D(filters, kernel_size: 3);
32+
33+
var x = np.arange(256.0f).reshape(1, 8, 8, 4);
34+
var y = conv.Apply(x);
35+
36+
Assert.AreEqual(4, y.shape.ndim);
37+
Assert.AreEqual(x.shape[0], y.shape[0]);
38+
Assert.AreEqual(x.shape[1] - 2, y.shape[1]);
39+
Assert.AreEqual(x.shape[2] - 2, y.shape[2]);
40+
Assert.AreEqual(filters, y.shape[3]);
41+
}
42+
43+
[TestMethod]
44+
public void BasicConv2D_ksize_same()
45+
{
46+
var filters = 8;
47+
var conv = keras.layers.Conv2D(filters, kernel_size: 3, padding: "same");
48+
49+
var x = np.arange(256.0f).reshape(1, 8, 8, 4);
50+
var y = conv.Apply(x);
51+
52+
Assert.AreEqual(4, y.shape.ndim);
53+
Assert.AreEqual(x.shape[0], y.shape[0]);
54+
Assert.AreEqual(x.shape[1], y.shape[1]);
55+
Assert.AreEqual(x.shape[2], y.shape[2]);
56+
Assert.AreEqual(filters, y.shape[3]);
57+
}
58+
59+
[TestMethod]
60+
public void BasicConv2D_ksize_strides()
61+
{
62+
var filters = 8;
63+
var conv = keras.layers.Conv2D(filters, kernel_size: 3, strides: 2);
64+
65+
var x = np.arange(256.0f).reshape(1, 8, 8, 4);
66+
var y = conv.Apply(x);
67+
68+
Assert.AreEqual(4, y.shape.ndim);
69+
Assert.AreEqual(x.shape[0], y.shape[0]);
70+
Assert.AreEqual(x.shape[1] - 5, y.shape[1]);
71+
Assert.AreEqual(x.shape[2] - 5, y.shape[2]);
72+
Assert.AreEqual(filters, y.shape[3]);
73+
}
74+
75+
[TestMethod]
76+
public void BasicConv2D_ksize_dilation()
77+
{
78+
var filters = 8;
79+
var conv = keras.layers.Conv2D(filters, kernel_size: 3, dilation_rate: 2);
80+
81+
var x = np.arange(256.0f).reshape(1, 8, 8, 4);
82+
var y = conv.Apply(x);
83+
84+
Assert.AreEqual(4, y.shape.ndim);
85+
Assert.AreEqual(x.shape[0], y.shape[0]);
86+
Assert.AreEqual(x.shape[1] - 4, y.shape[1]);
87+
Assert.AreEqual(x.shape[2] - 4, y.shape[2]);
88+
Assert.AreEqual(filters, y.shape[3]);
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)