Skip to content

Commit e5d7071

Browse files
committed
Split Tests
1 parent 5a57407 commit e5d7071

File tree

6 files changed

+147
-112
lines changed

6 files changed

+147
-112
lines changed

.github/workflows/test_python.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Python package
1+
name: Test Python package
22

33
on: [push]
44

tests/test_conv.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import unittest
2+
3+
from tensorflow.keras.layers import Input, MaxPooling2D, Dense
4+
from tensorflow.keras.models import Model, Sequential
5+
import tensorflow as tf
6+
7+
import numpy as np
8+
import complexnn as conn
9+
10+
11+
class TestConvMethods(unittest.TestCase):
12+
"""Test Conv methods class"""
13+
14+
def test_conv_outputs_forward(self):
15+
"""Test computed shape of forward convolution output"""
16+
layer = conn.ComplexConv2D(filters=4, kernel_size=3, strides=2, padding="same", transposed=False)
17+
input_shape = (None, 128, 128, 2)
18+
true = (None, 64, 64, 8)
19+
calc = layer.compute_output_shape(input_shape)
20+
self.assertEqual(true, calc)
21+
22+
def test_outputs_transpose(self):
23+
"""Test computed shape of transposed convolution output"""
24+
layer = conn.ComplexConv2D(filters=2, kernel_size=3, strides=2, padding="same", transposed=True)
25+
input_shape = (None, 64, 64, 4)
26+
true = (None, 128, 128, 4)
27+
calc = layer.compute_output_shape(input_shape)
28+
self.assertEqual(true, calc)
29+
30+
def test_conv2D_forward(self):
31+
"""Test shape of model output, forward"""
32+
inputs = Input(shape=(128, 128, 2))
33+
outputs = conn.ComplexConv2D(filters=4, kernel_size=3, strides=2, padding="same", transposed=False)(inputs)
34+
model = Model(inputs=inputs, outputs=outputs)
35+
true = (None, 64, 64, 8)
36+
calc = model.output_shape
37+
self.assertEqual(true, calc)
38+
39+
def test_conv2Dtranspose(self):
40+
"""Test shape of model output, transposed"""
41+
inputs = Input(shape=(64, 64, 20)) # = 10 CDN filters
42+
outputs = conn.ComplexConv2D(
43+
filters=2, kernel_size=3, strides=2, padding="same", transposed=True # = 4 Keras filters
44+
)(inputs)
45+
model = Model(inputs=inputs, outputs=outputs)
46+
true = (None, 128, 128, 4)
47+
calc = model.output_shape
48+
self.assertEqual(true, calc)

tests/test_dense.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
3+
from tensorflow.keras.layers import Input, MaxPooling2D, Dense
4+
from tensorflow.keras.models import Model, Sequential
5+
import tensorflow as tf
6+
7+
import numpy as np
8+
import complexnn as conn
9+
10+
11+
class TestDenseMethods(unittest.TestCase):
12+
"""Test Dense layer"""
13+
14+
def test_outputs_dense(self):
15+
"""Test computed shape of dense layer output"""
16+
layer = conn.ComplexDense(units=16, activation="relu")
17+
input_shape = (None, 8)
18+
true = (None, 16 * 2)
19+
calc = layer.compute_output_shape(input_shape)
20+
self.assertEqual(true, calc)
21+
22+
def test_outputs_dense(self):
23+
"""Test computed shape of dense layer output"""
24+
layer = conn.ComplexDense(units=16, activation="relu")
25+
input_shape = (None, 8)
26+
true = (None, 16 * 2)
27+
calc = layer.compute_output_shape(input_shape)
28+
self.assertEqual(true, calc)

tests/test_readme.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import unittest
2+
3+
from tensorflow.keras.layers import Input, MaxPooling2D, Dense
4+
from tensorflow.keras.models import Model, Sequential
5+
import tensorflow as tf
6+
7+
import numpy as np
8+
import complexnn as conn
9+
10+
11+
class TestDNCMethods(unittest.TestCase):
12+
"""Unit test class"""
13+
14+
def test_github_example(self):
15+
# example from repository https://github.com/JesperDramsch/keras-complex/blob/master/README.md page
16+
model = tf.keras.models.Sequential()
17+
model.add(conn.conv.ComplexConv2D(32, (3, 3), activation="relu", padding="same", input_shape=(28, 28, 2)))
18+
model.add(conn.bn.ComplexBatchNormalization())
19+
model.add(MaxPooling2D((2, 2), padding="same"))
20+
model.compile(optimizer=tf.keras.optimizers.Adam(), loss="mse")
21+
model.summary()

tests/test_train.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import unittest
2+
3+
from tensorflow.keras.layers import Input, MaxPooling2D, Dense
4+
from tensorflow.keras.models import Model, Sequential
5+
import tensorflow as tf
6+
7+
import numpy as np
8+
import complexnn as conn
9+
10+
11+
class TestTrainingRuns(unittest.TestCase):
12+
"""Unit test class"""
13+
14+
def test_train_transpose(self):
15+
"""Train using Conv2DTranspose"""
16+
x = np.random.randn(64 * 64).reshape((64, 64))
17+
y = np.random.randn(64 * 64).reshape((64, 64))
18+
X = np.stack((x, y), -1)
19+
X = np.expand_dims(X, 0)
20+
Y = X
21+
inputs = Input(shape=(64, 64, 2))
22+
conv1 = conn.ComplexConv2D(
23+
filters=2, kernel_size=3, strides=2, padding="same", transposed=False # = 4 Keras filters
24+
)(inputs)
25+
outputs = conn.ComplexConv2D(
26+
filters=1, kernel_size=3, strides=2, padding="same", transposed=True # = 2 Keras filters => 1 complex layer
27+
)(conv1)
28+
model = Model(inputs=inputs, outputs=outputs)
29+
model.compile(optimizer="adam", loss="mean_squared_error", metrics=["accuracy"])
30+
model.fit(X, Y, batch_size=1, epochs=10)
31+
32+
def test_train_dense(self):
33+
inputs = 28
34+
outputs = 128
35+
# build a sequential complex dense model
36+
model = Sequential(name="complex")
37+
model.add(conn.ComplexDense(32, activation="relu", input_shape=(inputs * 2,)))
38+
model.add(conn.ComplexBN())
39+
model.add(conn.ComplexDense(64, activation="relu"))
40+
model.add(conn.ComplexBN())
41+
model.add(Dense(128, activation="sigmoid"))
42+
model.compile(optimizer="adam", loss="mse")
43+
model.summary()
44+
# create some random data
45+
re = np.random.randn(inputs)
46+
im = np.random.randn(inputs)
47+
X = np.expand_dims(np.concatenate((re, im), -1), 0)
48+
Y = np.expand_dims(np.random.randn(outputs), 0)
49+
model.fit(X, Y, batch_size=1, epochs=10)

tests/unit_tests.py

Lines changed: 0 additions & 111 deletions
This file was deleted.

0 commit comments

Comments
 (0)