def compare_unary_op(self, kk_func, z_layer, shape, rtol=1e-5, atol=1e-5): x = klayers.Input(shape=shape[1:]) batch = shape[0] kkresult = kk_func(x) x_value = np.random.uniform(0, 1, shape) k_grads = KK.get_session().run(KK.gradients(kkresult, x), feed_dict={x: x_value}) k_output = KK.get_session().run(kkresult, feed_dict={x: x_value}) model = Sequential() model.add(InputLayer(shape[1:])) model.add(z_layer) z_output = model.forward(x_value) grad_output = np.array(z_output) grad_output.fill(1.0) z_grad = model.backward(x_value, grad_output) z_output2 = model.forward(x_value) z_grad2 = model.backward(x_value, grad_output) self.assert_allclose(z_output, z_output2, rtol, atol) self.assert_allclose(z_grad, z_grad2, rtol, atol) self.assert_allclose(z_output, k_output, rtol, atol) self.assert_allclose(z_grad, k_grads[0], rtol, atol)
def compare_layer(self, klayer, zlayer, input_data, weight_converter=None, is_training=False, rtol=1e-6, atol=1e-6): """ Compare forward results for Keras layer against Zoo Keras API layer. """ from keras.models import Sequential as KSequential from zoo.pipeline.api.keras.models import Sequential as ZSequential zmodel = ZSequential() zmodel.add(zlayer) kmodel = KSequential() kmodel.add(klayer) koutput = kmodel.predict(input_data) from zoo.pipeline.api.keras.layers import BatchNormalization if isinstance(zlayer, BatchNormalization): k_running_mean = K.eval(klayer.running_mean) k_running_std = K.eval(klayer.running_std) zlayer.set_running_mean(k_running_mean) zlayer.set_running_std(k_running_std) if kmodel.get_weights(): zmodel.set_weights(weight_converter(klayer, kmodel.get_weights())) zmodel.training(is_training) zoutput = zmodel.forward(input_data) self.assert_allclose(zoutput, koutput, rtol=rtol, atol=atol)
def test_square_as_first_layer(self): def z_func(x): return square(x) ll = Lambda(function=z_func, input_shape=[2, 3]) seq = Sequential() seq.add(ll) result = seq.forward(np.ones([2, 3])) assert (result == np.ones([2, 3])).all()
def compare_layer(self, klayer, zlayer, input_data, weight_converter=None, is_training=False, rtol=1e-6, atol=1e-6): """ Compare forward results for Keras layer against Zoo Keras API layer. """ from keras.models import Sequential as KSequential from zoo.pipeline.api.keras.models import Sequential as ZSequential zmodel = ZSequential() zmodel.add(zlayer) kmodel = KSequential() kmodel.add(klayer) koutput = kmodel.predict(input_data) from zoo.pipeline.api.keras.layers import BatchNormalization if isinstance(zlayer, BatchNormalization): k_running_mean = K.eval(klayer.running_mean) k_running_std = K.eval(klayer.running_std) zlayer.set_running_mean(k_running_mean) zlayer.set_running_std(k_running_std) if kmodel.get_weights(): zmodel.set_weights(weight_converter(klayer, kmodel.get_weights())) zmodel.training(is_training) zoutput = zmodel.forward(input_data) self.assert_allclose(zoutput, koutput, rtol=rtol, atol=atol)
def predict(model_path, image_path, top_n): sc = init_nncontext( "Image classification inference example using int8 quantized model") images = ImageSet.read(image_path, sc, image_codec=1) model = ImageClassifier.load_model(model_path) output = model.predict_image_set(images) label_map = model.get_config().label_map() # list of images composing uri and results in tuple format predicts = output.get_predict().collect() sequential = Sequential() sequential.add(Activation("softmax", input_shape=predicts[0][1][0].shape)) for pre in predicts: (uri, probs) = pre out = sequential.forward(probs[0]) sortedProbs = [(prob, index) for index, prob in enumerate(out)] sortedProbs.sort() print("Image : %s, top %d prediction result" % (uri, top_n)) for i in range(top_n): print( "\t%s, %f" % (label_map[sortedProbs[999 - i][1]], sortedProbs[999 - i][0]))