Ejemplo n.º 1
0
 def test_merge_4d(self):
     layers_to_be_tested = [Add, Maximum, Multiply, Average, Concatenate]
     N, C, H, W = 2, 2, 1, 3
     x1 = create_tensor(N, C, H, W)
     x2 = create_tensor(N, C, H, W)
     for layer in layers_to_be_tested:
         input1 = Input(shape=(H, W, C))
         input2 = Input(shape=(H, W, C))
         output = layer()([input1, input2])
         model = Model(inputs=[input1, input2], outputs=output)
         model.compile(optimizer='adagrad', loss='mse')
         self._test_one_to_one_operator_core_channels_last(model, [x1, x2])
Ejemplo n.º 2
0
    def test_recursive_model(self):
        N, C, D = 2, 3, 3
        x = create_tensor(N, C)

        sub_input1 = Input(shape=(C, ))
        sub_mapped1 = Dense(D)(sub_input1)
        sub_model1 = Model(inputs=sub_input1, outputs=sub_mapped1)

        sub_input2 = Input(shape=(C, ))
        sub_mapped2 = Dense(D)(sub_input2)
        sub_model2 = Model(inputs=sub_input2, outputs=sub_mapped2)

        input1 = Input(shape=(D, ))
        input2 = Input(shape=(D, ))
        mapped1_2 = sub_model1(input1)
        mapped2_2 = sub_model2(input2)
        sub_sum = Add()([mapped1_2, mapped2_2])
        keras_model = Model(inputs=[input1, input2], output=sub_sum)

        try:
            coreml_model = coremltools.converters.keras.convert(keras_model)
        except (AttributeError, ImportError) as e:
            warnings.warn(
                "Unable to test due to an error in coremltools '{0}'".format(
                    e))
            return

        onnx_model = onnxmltools.convert_coreml(coreml_model)

        x = [x, 2 * x]
        y_reference = keras_model.predict(x)
        y_produced = evaluate_deep_model(onnx_model, x).reshape(N, D)
Ejemplo n.º 3
0
    def test_sequential_model_with_multiple_operators(self):
        N, C, H, W = 2, 3, 5, 5
        x = create_tensor(N, C, H, W)

        model = Sequential()
        model.add(
            Conv2D(2,
                   kernel_size=(1, 2),
                   strides=(1, 1),
                   padding='valid',
                   input_shape=(H, W, C),
                   data_format='channels_last'))
        model.add(Activation('relu'))
        model.add(
            Conv2D(2,
                   kernel_size=(1, 2),
                   strides=(1, 1),
                   padding='valid',
                   input_shape=(H, W, C),
                   data_format='channels_last'))
        model.add(Activation('relu'))
        model.add(
            MaxPooling2D((2, 2), strides=(2, 2), data_format='channels_last'))

        model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(model, x)
    def test_recursive_and_shared_model(self):
        N, C, D = 2, 3, 3
        x = create_tensor(N, C)

        sub_input1 = Input(shape=(C, ))
        sub_mapped1 = Dense(D)(sub_input1)
        sub_output1 = Activation('sigmoid')(sub_mapped1)
        sub_model1 = Model(inputs=sub_input1, outputs=sub_output1)

        sub_input2 = Input(shape=(C, ))
        sub_mapped2 = sub_model1(sub_input2)
        sub_output2 = Activation('tanh')(sub_mapped2)
        sub_model2 = Model(inputs=sub_input2, outputs=sub_output2)

        input1 = Input(shape=(D, ))
        input2 = Input(shape=(D, ))
        mapped1_1 = Activation('tanh')(input1)
        mapped2_1 = Activation('sigmoid')(input2)
        mapped1_2 = sub_model1(mapped1_1)
        mapped1_3 = sub_model1(mapped1_2)
        mapped2_2 = sub_model2(mapped2_1)
        sub_sum = Add()([mapped1_3, mapped2_2])
        model = Model(inputs=[input1, input2], outputs=sub_sum)
        # coremltools can't convert this kind of model.
        self._test_one_to_one_operator_keras(model, [x, 2 * x])
Ejemplo n.º 5
0
 def test_merge_2d(self):
     # Skip Concatenate for now because  CoreML Concatenate needs 4-D input
     layers_to_be_tested = [Add, Maximum, Multiply, Average, Dot]
     N, C = 2, 3
     x1 = create_tensor(N, C)
     x2 = create_tensor(N, C)
     for layer in layers_to_be_tested:
         input1 = Input(shape=(C, ))
         input2 = Input(shape=(C, ))
         if layer == Dot:
             result = layer(axes=-1)([input1, input2])
         else:
             result = layer()([input1, input2])
         model = Model(inputs=[input1, input2], outputs=result)
         model.compile(optimizer='adagrad', loss='mse')
         self._test_one_to_one_operator_core(model, [x1, x2])
Ejemplo n.º 6
0
    def test_reshape(self):
        N, C, H, W = 2, 3, 1, 2
        x = create_tensor(N, C, H, W)

        keras_model = Sequential()
        keras_model.add(Reshape((1, C * H * W, 1), input_shape=(H, W, C)))
        keras_model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(keras_model, x)
Ejemplo n.º 7
0
    def test_convolution_transpose_2d(self):
        N, C, H, W = 2, 2, 1, 1
        x = create_tensor(N, C, H, W)
        input = Input(shape=(H, W, C))
        result = Conv2DTranspose(2, (2, 1), data_format='channels_last')(input)
        model = Model(inputs=input, outputs=result)
        model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(model, x)
Ejemplo n.º 8
0
    def test_upsample(self):
        N, C, H, W = 2, 3, 1, 2
        x = create_tensor(N, C, H, W)

        input = Input(shape=(H, W, C))
        result = UpSampling2D(input)
        model = Model(inputs=input, outputs=result)
        model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(model, x)
Ejemplo n.º 9
0
    def test_pooling_4d(self):
        layers_to_be_tested = [MaxPooling2D, AveragePooling2D]
        N, C, H, W = 1, 2, 4, 3
        x = create_tensor(N, C, H, W)
        for layer in layers_to_be_tested:
            input = Input(shape=(H, W, C))
            result = layer(2, data_format='channels_last')(input)
            model = Model(inputs=input, outputs=result)
            model.compile(optimizer='adagrad', loss='mse')

            self._test_one_to_one_operator_core_channels_last(model, x)
Ejemplo n.º 10
0
    def test_dense_with_dropout(self):
        N, C, D = 2, 3, 2
        x = create_tensor(N, C)

        input = Input(shape=(C, ))
        hidden = Dense(D, activation='relu')(input)
        result = Dropout(0.2)(hidden)

        keras_model = Model(inputs=input, outputs=result)
        keras_model.compile(optimizer='sgd', loss='mse')

        self._test_one_to_one_operator_core_keras(keras_model, x)
Ejemplo n.º 11
0
    def test_batch_normalization(self):
        N, C, H, W = 2, 2, 3, 4
        x = create_tensor(N, C, H, W)
        model = Sequential()
        input = Input(shape=(H, W, C))
        result = BatchNormalization(
            beta_initializer='random_uniform',
            gamma_initializer='random_uniform',
            moving_mean_initializer='random_uniform',
            moving_variance_initializer=RandomUniform(minval=0.1, maxval=0.5),
        )(input)
        model = Model(inputs=input, outputs=result)
        model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(model, x)
Ejemplo n.º 12
0
    def test_conv_4d(self):
        N, C, H, W = 1, 2, 4, 3
        x = create_tensor(N, C, H, W)

        input = Input(shape=(H, W, C))
        result = Conv2D(2,
                        kernel_size=(1, 2),
                        strides=(1, 1),
                        padding='valid',
                        input_shape=(H, W, C),
                        data_format='channels_last')(input)
        model = Model(inputs=input, outputs=result)
        model.compile(optimizer='adagrad', loss='mse')

        self._test_one_to_one_operator_core_channels_last(model, x)
Ejemplo n.º 13
0
    def test_activation_2d(self):
        activation_to_be_tested = [
            'tanh', 'relu', 'sigmoid', 'softsign', 'elu', 'softplus', LeakyReLU
        ]
        N, C = 2, 3
        x = create_tensor(N, C)

        for activation in activation_to_be_tested:
            input = Input(shape=(C, ))
            if isinstance(activation, str):
                result = Activation(activation)(input)
            else:
                result = activation()(input)
            model = Model(inputs=input, outputs=result)
            model.compile(optimizer='adagrad', loss='mse')

            self._test_one_to_one_operator_core(model, x)
Ejemplo n.º 14
0
    def test_flatten(self):
        N, C, H, W, D = 2, 3, 1, 2, 2
        x = create_tensor(N, C, H, W)

        keras_model = Sequential()
        keras_model.add(Flatten(input_shape=(H, W, C)))
        keras_model.add(Dense(D))
        keras_model.compile(optimizer='adagrad', loss='mse')

        try:
            coreml_model = coremltools.converters.keras.convert(keras_model)
        except ImportError:
            warnings.warn("Issue in coremltools.")
            return
        onnx_model = onnxmltools.convert_coreml(coreml_model)

        y_reference = keras_model.predict(np.transpose(x, [0, 2, 3, 1]))

        y_produced = evaluate_deep_model(onnx_model, x).reshape(N, D)

        self.assertTrue(np.allclose(y_reference, y_produced))
Ejemplo n.º 15
0
    def test_dense(self):
        N, C, D = 2, 3, 2
        x = create_tensor(N, C)

        input = Input(shape=(C, ))
        result = Dense(D)(input)
        keras_model = Model(inputs=input, outputs=result)
        keras_model.compile(optimizer='adagrad', loss='mse')

        try:
            coreml_model = coremltools.converters.keras.convert(keras_model)
        except (AttributeError, ImportError) as e:
            warnings.warn(
                "Unable to test due to an error in coremltools '{0}'.".format(
                    e))
            return
        onnx_model = onnxmltools.convert_coreml(coreml_model)

        y_reference = keras_model.predict(x)
        y_produced = evaluate_deep_model(onnx_model, x).reshape(N, D)

        self.assertTrue(np.allclose(y_reference, y_produced))