def test_submodel_multiple_inputs_in_middle_network(self): inputs3 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_3') inputs4 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_4') inputs1 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_1') # inputs2 = InputLayer(1, 28, 28, scale = 1.0 / 255, name = 'InputLayer_2') dense1 = Dense(10, name='d1')(inputs1) dense2 = Dense(12, name='d2')(dense1) dense3 = Dense(n=128, name='d3')(dense2) # model_dense = Model(self.s, inputs=inputs1, outputs= dense3) inputs2 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_2') # inputs2 = InputLayer(1, 28, 28, scale = 1.0 / 255, name = 'InputLayer_2') dense4 = Dense(10, name='d4')(inputs2) dense5 = Dense(12, name='d5')(dense4) dense6 = Dense(n=128, name='d6')(dense5) dense7 = Dense(n=190, name='cat1')([dense3, dense6]) model_dense = Model(self.s, inputs=[inputs1, inputs2], outputs=[dense7]) sub_model = model_dense([inputs3, inputs4]) dense7 = Dense(20, name='d7')(sub_model) output1 = OutputLayer(n=10, name='OutputLayer_1')(dense7) model = Model(self.s, inputs=[inputs3, inputs4], outputs=output1) model.compile() model.print_summary()
def test_multiple_branch(self): from dlpy.sequential import Sequential model = Sequential(self.s, model_table='Simple_CNN') model.add(InputLayer(3, 48, 96, scale=1 / 255, random_mutation='none')) model.add(Conv2d(64, 7, include_bias=True, act='relu')) model.add(Pooling(2)) model.add(Conv2d(64, 3, include_bias=True, act='relu')) model.add(Pooling(2)) model.add(Conv2d(64, 3, include_bias=True, act='relu')) model.add(Pooling(2)) model.add(Conv2d(64, 3, include_bias=True, act='relu')) model.add(Pooling(2)) model.add(Dense(16)) model.add(OutputLayer(n=1, act='sigmoid')) branch = model.to_functional_model(stop_layers=model.layers[-1]) inp1 = Input(**branch.layers[0].config) # tensor branch1 = branch(inp1) # tensor inp2 = Input(**branch.layers[0].config) # tensor branch2 = branch(inp2) # tensor inp3 = Input(**branch.layers[0].config) # tensor branch3 = branch(inp3) # tensor triplet = OutputLayer(n=1)(branch1 + branch2 + branch3) triplet_model = Model(self.s, inputs=[inp1, inp2, inp3], outputs=triplet) triplet_model.compile() triplet_model.print_summary() self.assertEqual(len(triplet_model.layers), 31) triplet_model.share_weights({'Convo.1': ['Convo.1_2', 'Convo.1_3']}) triplet_model.compile()
def test_submodel_as_inputs_network(self): inputs1 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_1') # inputs2 = InputLayer(1, 28, 28, scale = 1.0 / 255, name = 'InputLayer_2') dense1 = Dense(10, name='d1')(inputs1) dense2 = Dense(12, name='d2')(dense1) dense3 = Dense(n=128, name='d3')(dense2) model_dense = Model(self.s, inputs=inputs1, outputs=dense3) inputs2 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_2') # inputs2 = InputLayer(1, 28, 28, scale = 1.0 / 255, name = 'InputLayer_2') dense4 = Dense(10, name='d4')(inputs2) dense5 = Dense(12, name='d5')(dense4) dense6 = Dense(n=128, name='d6')(dense5) model_dense2 = Model(self.s, inputs=inputs2, outputs=dense6) inputs3 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_3') inputs4 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_4') out3 = model_dense(inputs3) out4 = model_dense2(inputs4) out5 = [out4[0], out3[0]] concat1 = Dense(20, name='d7')(out5) output1 = OutputLayer(n=10, name='OutputLayer_1')(concat1) model = Model(self.s, inputs=[inputs3, inputs4], outputs=output1) model.compile() model.print_summary() self.assertTrue(model.count_params() == 62262)
def test_without_variable(self): input1 = Input(n_channels=1, width=28, height=28) conv1 = Conv2d(2)(Conv2d(2)(input1)) output1 = OutputLayer(n=2)(conv1) model1 = Model(conn=self.s, inputs=[input1], outputs=[output1]) model1.compile() model1.print_summary() self.assertTrue(model1.count_params() == 3196)
def test_non_list_src_layers(self): inputs = Input(1, 28, 28, scale=1.0 / 255, name='InputLayer_1') fc1 = Dense(n=128)(inputs) fc2 = Dense(n=64)(fc1) output1 = OutputLayer(n=10, name='OutputLayer_1')([fc1, fc2]) model = Model(self.s, inputs=inputs, outputs=output1) model.compile() model.print_summary() self.assertTrue(model.count_params() == 109834)
def test_given_name(self): inputs = Input(3, 512, 512, scale=1.0 / 255, name='input1') conv1 = Conv2d(8, 3, act='relu')(inputs) conv2 = Conv2d(8, 3, act='relu')(inputs) merge3 = Concat()([conv1, conv2]) conv3 = Conv2d(3, 3, act='relu')(merge3) output1 = OutputLayer(name='output1')(conv3) model = Model(self.s, inputs=inputs, outputs=output1) model.compile() self.assertTrue(inputs._op.name == 'input1') self.assertTrue(output1._op.name == 'output1') model.print_summary()
def test_concat(self): input1 = Input(n_channels=1, width=28, height=28) input2 = Input(n_channels=3, width=28, height=28) conv1 = Conv2d(2)(input1) conv2 = Conv2d(2)(input1) conv3 = Conv2d(2)(input2) output2 = OutputLayer(n=2)(conv3) concat1 = Concat()([conv1, conv2, conv3]) output1 = OutputLayer(n=2)(concat1) model1 = Model(conn=self.s, inputs=[input1, input2], outputs=[output1, output2]) model1.compile() model1.print_summary() self.assertTrue(model1.count_params() == 12644)
def test_residual_output_shape0(self): inLayer = Input(n_channels = 3, width = 32, height = 128, name = 'input1', random_mutation = 'random', random_flip = 'HV') conv1 = Conv2d(32, 3, 3, name = 'conv1', act = 'relu', init = 'msra')([inLayer]) conv2 = Conv2d(32, 5, 5, name = 'conv2', act = 'relu', init = 'msra')([inLayer]) fc1 = Dense(3, name = 'fc1')([conv1]) fc2 = Dense(3, name = 'fc2')([conv2]) res = Res(name = 'res1')([fc1, fc2]) outLayer = OutputLayer(n = 3, name = 'output')([res]) model = Model(self.s, inLayer, outLayer) model.compile() self.assertEqual(model.summary['Output Size'].values[-2], 3) model.print_summary()
def test_option_type(self): input1 = Input(n_channels=1, width=28, height=28) conv1 = Conv2d(2)(input1) conv2 = Conv2d(2)(input1) concat1 = Concat()([conv1, conv2]) output1 = OutputLayer(n=2)(concat1) model1 = Model(conn=self.s, inputs=[input1], outputs=output1) model1.compile() model1.print_summary() self.assertTrue(model1.count_params() == 6314) model2 = Model(conn=self.s, inputs=input1, outputs=output1) model2.compile() model2.print_summary() model2.plot_network() self.assertTrue(model2.count_params() == 6314)
def test_submodel_in_middle_network(self): inputs1 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_1') inputs2 = Input(1, 28, 28, scale=1.0 / 255, name='InputLayer_2') dense1 = Dense(10, name='d1')(inputs2) dense2 = Dense(12, name='d2')(dense1) dense3 = Dense(n=128, name='d3')(dense2) model_dense = Model(self.s, inputs=inputs2, outputs=dense3) fore = model_dense(inputs1) concat1 = Dense(20, name='d7')(fore) output1 = OutputLayer(n=10, name='OutputLayer_1')(concat1) model = Model(self.s, inputs=[inputs1], outputs=output1) model.compile() model.print_summary() self.assertTrue(model.count_params() == 32516)
def test_submodel_as_input_network(self): inputs1 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_1') # inputs2 = InputLayer(1, 28, 28, scale = 1.0 / 255, name = 'InputLayer_2') dense1 = Dense(10, name='dense1')(inputs1) dense2 = Dense(12, name='dense2')(dense1) dense3 = Dense(n=128, name='dense3')(dense2) model_dense = Model(self.s, inputs=inputs1, outputs=dense3) inputs2 = Input(1, 53, 53, scale=1.0 / 255, name='InputLayer_2') out_submodel = model_dense(inputs2) concat1 = Dense(20, 'concat1')(out_submodel) output1 = OutputLayer(n=10, name='OutputLayer_1')(concat1) model = Model(self.s, inputs=[inputs2], outputs=output1) model.compile() model.print_summary() self.assertTrue(model.count_params() == 32516)
def test_stop_layers(self): from dlpy.sequential import Sequential model1 = Sequential(self.s) model1.add(InputLayer(3, 224, 224)) model1.add(Conv2d(8, 7)) model1.add(Pooling(2)) model1.add(Conv2d(8, 7)) model1.add(Pooling(2)) model1.add(Dense(16)) model1.add(OutputLayer(act = 'softmax', n = 2)) inputlayer = model1.layers[0] inp = Input(**inputlayer.config) func_model = model1.to_functional_model(stop_layers = [model1.layers[-1]]) x = func_model(inp) out = Keypoints(n=10)(x) func_model_keypoints = Model(self.s, inp, out) func_model_keypoints.compile() func_model_keypoints.print_summary()