99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
|
import numpy as np
|
||
|
|
||
|
from keras_core import backend
|
||
|
from keras_core import layers
|
||
|
from keras_core import testing
|
||
|
from keras_core.layers.core.input_layer import Input
|
||
|
from keras_core.models.functional import Functional
|
||
|
from keras_core.models.sequential import Sequential
|
||
|
|
||
|
|
||
|
class SequentialTest(testing.TestCase):
|
||
|
def test_basic_flow_with_input(self):
|
||
|
model = Sequential(name="seq")
|
||
|
model.add(Input(shape=(2,), batch_size=3))
|
||
|
model.add(layers.Dense(4))
|
||
|
model.add(layers.Dense(5))
|
||
|
|
||
|
self.assertEqual(len(model.layers), 2)
|
||
|
|
||
|
# Test eager call
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertTrue(model.built)
|
||
|
self.assertEqual(type(model._functional), Functional)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test symbolic call
|
||
|
x = backend.KerasTensor((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test `layers` constructor arg
|
||
|
model = Sequential(
|
||
|
layers=[
|
||
|
Input(shape=(2,), batch_size=3),
|
||
|
layers.Dense(4),
|
||
|
layers.Dense(5),
|
||
|
]
|
||
|
)
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test pop
|
||
|
model.pop()
|
||
|
self.assertFalse(model.built)
|
||
|
self.assertEqual(model._functional, None)
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertTrue(model.built)
|
||
|
self.assertEqual(type(model._functional), Functional)
|
||
|
self.assertEqual(y.shape, (3, 4))
|
||
|
|
||
|
def test_basic_flow_deferred(self):
|
||
|
model = Sequential(name="seq")
|
||
|
model.add(layers.Dense(4))
|
||
|
model.add(layers.Dense(5))
|
||
|
|
||
|
self.assertEqual(len(model.layers), 2)
|
||
|
|
||
|
# Test eager call
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertTrue(model.built)
|
||
|
self.assertEqual(type(model._functional), Functional)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test symbolic call
|
||
|
x = backend.KerasTensor((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test `layers` constructor arg
|
||
|
model = Sequential(
|
||
|
layers=[
|
||
|
layers.Dense(4),
|
||
|
layers.Dense(5),
|
||
|
]
|
||
|
)
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertEqual(y.shape, (3, 5))
|
||
|
|
||
|
# Test pop
|
||
|
model.pop()
|
||
|
self.assertFalse(model.built)
|
||
|
self.assertEqual(model._functional, None)
|
||
|
x = np.random.random((3, 2))
|
||
|
y = model(x)
|
||
|
self.assertTrue(model.built)
|
||
|
self.assertEqual(type(model._functional), Functional)
|
||
|
self.assertEqual(y.shape, (3, 4))
|
||
|
|
||
|
def test_dict_inputs(self):
|
||
|
pass
|
||
|
|
||
|
def test_serialization(self):
|
||
|
pass
|