예제 #1
0
def test_model_signature():
    signature1 = ModelSignature(inputs=Schema(
        [ColSpec(DataType.boolean),
         ColSpec(DataType.binary)]),
                                outputs=Schema([
                                    ColSpec(name=None, type=DataType.double),
                                    ColSpec(name=None, type=DataType.double)
                                ]))
    signature2 = ModelSignature(inputs=Schema(
        [ColSpec(DataType.boolean),
         ColSpec(DataType.binary)]),
                                outputs=Schema([
                                    ColSpec(name=None, type=DataType.double),
                                    ColSpec(name=None, type=DataType.double)
                                ]))
    assert signature1 == signature2
    signature3 = ModelSignature(inputs=Schema(
        [ColSpec(DataType.boolean),
         ColSpec(DataType.binary)]),
                                outputs=Schema([
                                    ColSpec(name=None, type=DataType.float),
                                    ColSpec(name=None, type=DataType.double)
                                ]))
    assert signature3 != signature1
    as_json = json.dumps(signature1.to_dict())
    signature4 = ModelSignature.from_dict(json.loads(as_json))
    assert signature1 == signature4
    signature5 = ModelSignature(inputs=Schema(
        [ColSpec(DataType.boolean),
         ColSpec(DataType.binary)]),
                                outputs=None)
    as_json = json.dumps(signature5.to_dict())
    signature6 = ModelSignature.from_dict(json.loads(as_json))
    assert signature5 == signature6
예제 #2
0
def test_model_signature_with_tensorspec():
    signature1 = ModelSignature(
        inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]),
        outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10))]),
    )
    signature2 = ModelSignature(
        inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]),
        outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10))]),
    )
    # Single type mismatch
    assert signature1 == signature2
    signature3 = ModelSignature(
        inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]),
        outputs=Schema([TensorSpec(np.dtype("int"), (-1, 10))]),
    )
    assert signature3 != signature1
    # Name mismatch
    signature4 = ModelSignature(
        inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]),
        outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), "misMatch")]),
    )
    assert signature3 != signature4
    as_json = json.dumps(signature1.to_dict())
    signature5 = ModelSignature.from_dict(json.loads(as_json))
    assert signature1 == signature5

    # Test with name
    signature6 = ModelSignature(
        inputs=Schema(
            [
                TensorSpec(np.dtype("float"), (-1, 28, 28), name="image"),
                TensorSpec(np.dtype("int"), (-1, 10), name="metadata"),
            ]
        ),
        outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), name="outputs")]),
    )
    signature7 = ModelSignature(
        inputs=Schema(
            [
                TensorSpec(np.dtype("float"), (-1, 28, 28), name="image"),
                TensorSpec(np.dtype("int"), (-1, 10), name="metadata"),
            ]
        ),
        outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), name="outputs")]),
    )
    assert signature6 == signature7
    assert signature1 != signature6

    # Test w/o output
    signature8 = ModelSignature(
        inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=None
    )
    as_json = json.dumps(signature8.to_dict())
    signature9 = ModelSignature.from_dict(json.loads(as_json))
    assert signature8 == signature9
예제 #3
0
    def from_dict(cls, model_dict):
        """Load a model from its YAML representation."""
        if "signature" in model_dict and isinstance(model_dict["signature"], dict):
            model_dict = model_dict.copy()
            model_dict["signature"] = ModelSignature.from_dict(model_dict["signature"])

        return cls(**model_dict)