List of usage examples for com.google.gson JsonObject JsonObject
JsonObject
From source file:be.iminds.iot.dianne.builder.DianneBuilder.java
License:Open Source License
private void getModuleProperties(String type, PrintWriter writer) { ModuleTypeDTO module = null;/*from ww w. j a v a 2s .c o m*/ synchronized (factories) { for (ModuleFactory f : factories) { module = f.getModuleType(type); if (module != null) break; } } if (module == null) { // return; } JsonArray jsonProperties = new JsonArray(); for (ModulePropertyDTO p : module.properties) { JsonObject jsonProperty = new JsonObject(); jsonProperty.addProperty("id", p.id); jsonProperty.addProperty("name", p.name); jsonProperties.add(jsonProperty); } writer.write(jsonProperties.toString()); writer.flush(); }
From source file:be.iminds.iot.dianne.builder.DianneData.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String action = request.getParameter("action"); if (action.equals("available-datasets")) { JsonArray result = new JsonArray(); synchronized (datasets) { for (DatasetDTO d : datasets.getDatasets()) { JsonObject r = new JsonObject(); r.add("dataset", new JsonPrimitive(d.name)); r.add("size", new JsonPrimitive(d.size)); if (d.inputType != null) r.add("inputType", new JsonPrimitive(d.inputType)); if (d.targetType != null) r.add("targetType", new JsonPrimitive(d.targetType)); String[] ll = d.labels; if (ll != null) { JsonArray labels = new JsonArray(); for (String l : ll) { labels.add(new JsonPrimitive(l)); }/* ww w. j ava2 s . c o m*/ r.add("labels", labels); } result.add(r); } } response.getWriter().println(result.toString()); response.getWriter().flush(); } else if (action.equals("sample")) { String dataset = request.getParameter("dataset"); Dataset d = datasets.getDataset(dataset); if (d != null && d.size() > 0) { int index = rand.nextInt(d.size()); Sample s = d.getSample(index); JsonObject sample = converter.toJson(s.input); sample.add("index", new JsonPrimitive(index)); String[] labels = d.getLabels(); if (labels != null) { sample.add("target", new JsonPrimitive(labels[TensorOps.argmax(s.target)])); } else { if (s.target.size() < 10) { JsonObject target = converter.toJson(s.target); sample.add("target", target.get("data").getAsJsonArray()); } } response.getWriter().println(sample.toString()); response.getWriter().flush(); } } }
From source file:be.iminds.iot.dianne.builder.DianneDatasets.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if (action.equals("available-datasets")) { JsonArray result = new JsonArray(); synchronized (datasets) { for (Dataset d : datasets.values()) { JsonObject r = new JsonObject(); r.add("dataset", new JsonPrimitive(d.getName())); r.add("size", new JsonPrimitive(d.size())); JsonArray labels = new JsonArray(); for (String l : d.getLabels()) { labels.add(new JsonPrimitive(l)); }/*from ww w .jav a 2 s.c o m*/ r.add("labels", labels); result.add(r); } } response.getWriter().println(result.toString()); response.getWriter().flush(); } else if (action.equals("sample")) { String dataset = request.getParameter("dataset"); Dataset d = datasets.get(dataset); if (d != null) { JsonObject sample = new JsonObject(); Tensor t = d.getInputSample(rand.nextInt(d.size())); if (t.dims().length == 3) { sample.add("channels", new JsonPrimitive(t.dims()[0])); sample.add("height", new JsonPrimitive(t.dims()[1])); sample.add("width", new JsonPrimitive(t.dims()[2])); } else { sample.add("channels", new JsonPrimitive(1)); sample.add("height", new JsonPrimitive(t.dims()[0])); sample.add("width", new JsonPrimitive(t.dims()[1])); } sample.add("data", parser.parse(Arrays.toString(t.get()))); response.getWriter().println(sample.toString()); response.getWriter().flush(); } } }
From source file:be.iminds.iot.dianne.builder.DianneDeployer.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String action = request.getParameter("action"); if (action.equals("deploy")) { String id = request.getParameter("id"); if (id == null) { id = UUID.randomUUID().toString(); }/* ww w . j a va2s.co m*/ String name = request.getParameter("name"); if (name == null) { name = "unknown"; } String[] tags = null; String t = request.getParameter("tags"); if (t != null && !t.isEmpty()) { tags = t.split(","); } List<ModuleDTO> toDeploy = new ArrayList<ModuleDTO>(); if (request.getParameter("modules") != null) { String modulesJsonString = request.getParameter("modules"); NeuralNetworkDTO nn = DianneJSONConverter.parseJSON(modulesJsonString); toDeploy.addAll(nn.modules.values()); } else if (request.getParameter("module") != null) { String moduleJsonString = request.getParameter("module"); ModuleDTO module = DianneJSONConverter.parseModuleJSON(moduleJsonString); toDeploy.add(module); } try { String target = request.getParameter("target"); if (target == null) { throw new Exception("No DIANNE runtime selected to deploy to"); } UUID runtimeId = UUID.fromString(target); UUID nnId = UUID.fromString(id); List<ModuleInstanceDTO> moduleInstances = platform.deployModules(nnId, name, toDeploy, runtimeId, tags); // return json object with deployment JsonObject result = new JsonObject(); JsonObject deployment = deploymentToJSON(moduleInstances); result.add("id", new JsonPrimitive(id)); result.add("deployment", deployment); try { response.getWriter().write(result.toString()); response.getWriter().flush(); } catch (IOException e) { } } catch (Exception ex) { System.out.println("Failed to deploy modules: " + ex.getMessage()); JsonObject result = new JsonObject(); result.add("error", new JsonPrimitive("Failed to deploy modules: " + ex.getMessage())); try { response.getWriter().write(result.toString()); response.getWriter().flush(); } catch (IOException e) { } } } else if (action.equals("undeploy")) { String id = request.getParameter("id"); String moduleId = request.getParameter("moduleId"); if (id != null) { NeuralNetworkInstanceDTO nn = platform.getNeuralNetworkInstance(UUID.fromString(id)); if (nn != null) { ModuleInstanceDTO moduleInstance = nn.modules.get(UUID.fromString(moduleId)); if (moduleInstance != null) platform.undeployModules(Collections.singletonList(moduleInstance)); response.getWriter().write(new JsonPrimitive(id).toString()); response.getWriter().flush(); } } } else if (action.equals("targets")) { JsonArray targets = new JsonArray(); Map<UUID, String> runtimes = platform.getRuntimes(); runtimes.entrySet().stream().forEach(e -> { JsonObject o = new JsonObject(); o.add("id", new JsonPrimitive(e.getKey().toString())); o.add("name", new JsonPrimitive(e.getValue())); targets.add(o); }); response.getWriter().write(targets.toString()); response.getWriter().flush(); } else if ("recover".equals(action)) { String id = request.getParameter("id"); if (id == null) { // list all options JsonArray nns = new JsonArray(); platform.getNeuralNetworkInstances().stream().forEach(nni -> { JsonObject o = new JsonObject(); o.add("id", new JsonPrimitive(nni.id.toString())); o.add("name", new JsonPrimitive(nni.name)); if (nni.description != null) { o.add("description", new JsonPrimitive(nni.description)); } nns.add(o); }); response.getWriter().write(nns.toString()); response.getWriter().flush(); } else { NeuralNetworkInstanceDTO nni = platform.getNeuralNetworkInstance(UUID.fromString(id)); if (nni == null) { System.out.println("Failed to recover " + id + " , instance not found"); return; } try { response.getWriter().write("{\"nn\":"); NeuralNetworkDTO nn = repository.loadNeuralNetwork(nni.name); String s = DianneJSONConverter.toJsonString(nn); response.getWriter().write(s); response.getWriter().write(", \"layout\":"); String layout = repository.loadLayout(nni.name); response.getWriter().write(layout); response.getWriter().write(", \"deployment\":"); JsonObject deployment = deploymentToJSON(nni.modules.values()); response.getWriter().write(deployment.toString()); response.getWriter().write(", \"id\":"); response.getWriter().write("\"" + id + "\""); response.getWriter().write("}"); response.getWriter().flush(); } catch (Exception e) { System.out.println("Failed to recover " + nni.name + " " + nni.id); } } } }
From source file:be.iminds.iot.dianne.builder.DianneDeployer.java
License:Open Source License
private JsonObject deploymentToJSON(Collection<ModuleInstanceDTO> moduleInstances) { JsonObject deployment = new JsonObject(); for (ModuleInstanceDTO moduleInstance : moduleInstances) { String runtime = moduleInstance.runtimeId.toString(); if (runtime == null) { runtime = moduleInstance.runtimeId.toString(); }//from ww w . j a v a 2 s . c o m deployment.add(moduleInstance.moduleId.toString(), new JsonPrimitive(runtime)); } return deployment; }
From source file:be.iminds.iot.dianne.builder.DianneInput.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String action = request.getParameter("action"); if ("available-inputs".equals(action)) { JsonArray availableInputs = new JsonArray(); synchronized (inputs) { for (DianneInputs i : inputs) { for (InputDescription input : i.getAvailableInputs()) { JsonObject o = new JsonObject(); o.add("name", new JsonPrimitive(input.getName())); o.add("type", new JsonPrimitive(input.getType())); availableInputs.add(o); }//from www.j a v a 2s . com } } response.getWriter().write(availableInputs.toString()); response.getWriter().flush(); } else if ("setinput".equals(action)) { String nnId = request.getParameter("nnId"); String inputId = request.getParameter("inputId"); String input = request.getParameter("input"); synchronized (inputs) { // TODO select the right one instead of forwarding to all? for (DianneInputs i : inputs) { i.setInput(UUID.fromString(nnId), UUID.fromString(inputId), input); } ForwardListener inputListener = new ForwardListener() { @Override public void onForward(UUID moduleId, Tensor output, String... tags) { if (sses.get(input) != null) { JsonObject json = converter.toJson(output); StringBuilder builder = new StringBuilder(); builder.append("data: ").append(json.toString()).append("\n\n"); String msg = builder.toString(); List<AsyncContext> list = sses.get(input); Iterator<AsyncContext> it = list.iterator(); while (it.hasNext()) { AsyncContext sse = it.next(); try { PrintWriter writer = sse.getResponse().getWriter(); writer.write(msg); writer.flush(); if (writer.checkError()) { System.err.println("Writer error: removing async endpoint."); writer.close(); it.remove(); } } catch (Exception e) { try { sse.getResponse().getWriter().close(); } catch (Exception ignore) { } it.remove(); e.printStackTrace(); } } } } @Override public void onError(UUID moduleId, ModuleException e, String... tags) { e.printStackTrace(); } }; Dictionary<String, Object> properties = new Hashtable<String, Object>(); properties.put("targets", new String[] { nnId + ":" + inputId }); properties.put("aiolos.unique", true); ServiceRegistration<ForwardListener> r = context.registerService(ForwardListener.class, inputListener, properties); inputListeners.put(UUID.fromString(inputId), r); } } else if ("unsetinput".equals(action)) { String nnId = request.getParameter("nnId"); String inputId = request.getParameter("inputId"); String input = request.getParameter("input"); synchronized (inputs) { for (DianneInputs i : inputs) { i.unsetInput(UUID.fromString(nnId), UUID.fromString(inputId), input); } } ServiceRegistration<ForwardListener> r = inputListeners.get(UUID.fromString(inputId)); if (r != null) { r.unregister(); } } }
From source file:be.iminds.iot.dianne.builder.DianneLearner.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String id = request.getParameter("id"); if (id == null) { System.out.println("No neural network instance specified"); }/* ww w . java 2 s . c o m*/ UUID nnId = UUID.fromString(id); NeuralNetworkInstanceDTO nni = platform.getNeuralNetworkInstance(nnId); if (nni == null) { System.out.println("Neural network instance " + id + " not deployed"); return; } String action = request.getParameter("action"); if (action.equals("stop")) { learner.stop(); return; } String target = request.getParameter("target"); // this list consists of all ids of modules that are needed for trainer: // the input, output, trainable and preprocessor modules String configJsonString = request.getParameter("config"); JsonObject configJson = parser.parse(configJsonString).getAsJsonObject(); JsonObject learnerConfig = (JsonObject) configJson.get(target); for (Entry<String, JsonElement> configs : configJson.entrySet()) { JsonObject datasetConfig = (JsonObject) configs.getValue(); if (datasetConfig.get("category").getAsString().equals("Dataset") && datasetConfig.get("input") != null) { String dataset = datasetConfig.get("dataset").getAsString(); if (action.equals("learn")) { int start = 0; int end = datasetConfig.get("train").getAsInt(); int batch = learnerConfig.get("batch").getAsInt(); float learningRate = learnerConfig.get("learningRate").getAsFloat(); float momentum = learnerConfig.get("momentum").getAsFloat(); float regularization = learnerConfig.get("regularization").getAsFloat(); String criterion = learnerConfig.get("loss").getAsString(); String method = learnerConfig.get("method").getAsString(); boolean clean = learnerConfig.get("clean").getAsBoolean(); Map<String, String> config = new HashMap<>(); config.put("range", "" + start + "," + end); config.put("batchSize", "" + batch); config.put("learningRate", "" + learningRate); config.put("momentum", "" + momentum); config.put("regularization", "" + regularization); config.put("criterion", criterion); config.put("method", method); config.put("syncInterval", "" + interval); config.put("clean", clean ? "true" : "false"); config.put("trace", "true"); try { Dataset d = datasets.getDataset(dataset); if (d != null) { JsonObject labels = new JsonObject(); labels.add(target, new JsonPrimitive(Arrays.toString(d.getLabels()))); response.getWriter().write(labels.toString()); response.getWriter().flush(); } learner.learn(dataset, config, nni); } catch (Exception e) { e.printStackTrace(); } } else if (action.equals("evaluate")) { int start = datasetConfig.get("train").getAsInt(); int end = start + datasetConfig.get("test").getAsInt(); Map<String, String> config = new HashMap<>(); config.put("range", "" + start + "," + end); try { Evaluation result = evaluator.eval(dataset, config, nni); JsonObject eval = new JsonObject(); eval.add("metric", new JsonPrimitive(result.metric())); eval.add("time", new JsonPrimitive(result.time())); if (result instanceof ErrorEvaluation) { ErrorEvaluation ee = (ErrorEvaluation) result; eval.add("error", new JsonPrimitive(ee.error())); } if (result instanceof ClassificationEvaluation) { ClassificationEvaluation ce = (ClassificationEvaluation) result; eval.add("accuracy", new JsonPrimitive(ce.accuracy() * 100)); Tensor confusionMatrix = ce.confusionMatrix(); JsonArray data = new JsonArray(); for (int i = 0; i < confusionMatrix.size(0); i++) { for (int j = 0; j < confusionMatrix.size(1); j++) { JsonArray element = new JsonArray(); element.add(new JsonPrimitive(i)); element.add(new JsonPrimitive(j)); element.add(new JsonPrimitive(confusionMatrix.get(i, j))); data.add(element); } } eval.add("confusionMatrix", data); } response.getWriter().write(eval.toString()); response.getWriter().flush(); } catch (Exception e) { e.printStackTrace(); JsonObject eval = new JsonObject(); eval.add("error", new JsonPrimitive(e.getCause().getMessage())); response.getWriter().write(eval.toString()); response.getWriter().flush(); } } break; } } }
From source file:be.iminds.iot.dianne.builder.DianneOutput.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String action = request.getParameter("action"); if ("available-outputs".equals(action)) { JsonArray availableOutputs = new JsonArray(); synchronized (outputs) { for (DianneOutputs o : outputs) { for (OutputDescription output : o.getAvailableOutputs()) { JsonObject ob = new JsonObject(); ob.add("name", new JsonPrimitive(output.getName())); ob.add("type", new JsonPrimitive(output.getType())); availableOutputs.add(ob); }/*from w w w .j a va 2 s. co m*/ } } response.getWriter().write(availableOutputs.toString()); response.getWriter().flush(); } else if ("setoutput".equals(action)) { String nnId = request.getParameter("nnId"); String outputId = request.getParameter("outputId"); String output = request.getParameter("output"); // TODO only forward to applicable outputmgr? synchronized (outputs) { for (DianneOutputs o : outputs) { o.setOutput(UUID.fromString(nnId), UUID.fromString(outputId), output); } } } else if ("unsetoutput".equals(action)) { String nnId = request.getParameter("nnId"); String outputId = request.getParameter("outputId"); String output = request.getParameter("output"); // TODO only forward to applicable outputmgr? synchronized (outputs) { for (DianneOutputs o : outputs) { o.unsetOutput(UUID.fromString(nnId), UUID.fromString(outputId), output); } } } }
From source file:be.iminds.iot.dianne.builder.DianneRunner.java
License:Open Source License
private String errorSSEMessage(ModuleException exception) { JsonObject data = new JsonObject(); data.add("id", new JsonPrimitive(exception.moduleId.toString())); data.add("error", new JsonPrimitive(exception.getMessage())); StringBuilder builder = new StringBuilder(); builder.append("data: ").append(data.toString()).append("\n\n"); return builder.toString(); }
From source file:be.iminds.iot.dianne.builder.DianneVAE.java
License:Open Source License
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); String d = request.getParameter("dataset"); if (d == null) { System.out.println("No dataset provided"); return;/*from w w w .ja va 2 s . c o m*/ } Dataset dataset = datasets.getDataset(d); if (dataset == null) { System.out.println("No such dataset found: " + d); return; } String enc = request.getParameter("encoder"); if (enc == null) { System.out.println("No encoder provided"); return; } NeuralNetwork encoder = nns.get(enc); if (encoder == null) { try { encoder = dianne.getNeuralNetwork(platform.deployNeuralNetwork(enc, new String[] { "vae" })) .getValue(); nns.put(enc, encoder); } catch (Exception e) { e.printStackTrace(); return; } } NeuralNetwork decoder = null; String dec = request.getParameter("decoder"); if (dec != null) { decoder = nns.get(dec); if (decoder == null) { try { decoder = dianne.getNeuralNetwork(platform.deployNeuralNetwork(dec, new String[] { "vae" })) .getValue(); nns.put(dec, decoder); } catch (Exception e) { e.printStackTrace(); } } } int size = this.size; String s = request.getParameter("size"); if (s != null) { size = Integer.parseInt(s); } JsonArray result = new JsonArray(); String sample = request.getParameter("sample"); String l = request.getParameter("latent"); if (sample == null && l == null) { // fetch random samples from dataset for (int i = 0; i < size; i++) { JsonObject o = new JsonObject(); int index = random.nextInt(dataset.size()); Tensor data = dataset.getSample(index).input; Tensor latent = encoder.forward(data); o.add("index", new JsonPrimitive(index)); o.add("data", converter.toJson(data)); o.add("latent", converter.toJson(latent)); result.add(o); } } else { Tensor latent = null; if (sample != null) { int index = Integer.parseInt(sample); Tensor base = dataset.getSample(index).input; latent = encoder.forward(base).clone(); } else { Tensor lmeans = converter.fromString(l); latent = new Tensor(lmeans.size() * 2); latent.fill(0.0f); lmeans.copyInto(latent.narrow(0, lmeans.size())); } if (decoder != null) { // generate samples using the decoder Tensor mean = latent.narrow(0, latent.size() / 2); Tensor stdev = latent.narrow(latent.size() / 2, latent.size() / 2); Tensor rand = new Tensor(latent.size() / 2); Tensor rand2 = null; for (int i = 0; i < size; i++) { rand.randn(); TensorOps.cmul(rand, rand, stdev); TensorOps.add(rand, rand, mean); Tensor reconstruction = decoder.forward(rand); Tensor rmean = reconstruction.narrow(0, reconstruction.size() / 2); Tensor rstdev = reconstruction.narrow(reconstruction.size() / 2, reconstruction.size() / 2); if (rand2 == null) { rand2 = new Tensor(rmean.dims()); } rand2.randn(); TensorOps.cmul(rand2, rand2, rstdev); TensorOps.add(rand2, rand2, rmean); JsonObject o = new JsonObject(); o.add("index", new JsonPrimitive(-1)); o.add("data", converter.toJson(rand2)); o.add("latent", converter.toJson(latent)); result.add(o); } } else { // search for samples close to this sample in the dataset final Tensor baseline = latent; SortedSet<LatentSample> set = new TreeSet<>(new Comparator<LatentSample>() { @Override public int compare(LatentSample o1, LatentSample o2) { Tensor diff = TensorOps.sub(null, o1.latent.narrow(0, baseline.size() / 2), baseline.narrow(0, baseline.size() / 2)); Float d1 = TensorOps.dot(diff, diff); diff = TensorOps.sub(null, o2.latent.narrow(0, baseline.size() / 2), baseline.narrow(0, baseline.size() / 2)); Float d2 = TensorOps.dot(diff, diff); return d1.compareTo(d2); } }); for (int i = 0; i < tries; i++) { LatentSample ls = new LatentSample(); ls.index = random.nextInt(dataset.size()); ls.data = dataset.getSample(ls.index).input; ls.latent = encoder.forward(ls.data).clone(); set.add(ls); if (set.size() > size) { set.remove(set.last()); } } for (LatentSample ls : set) { JsonObject o = new JsonObject(); o.add("index", new JsonPrimitive(ls.index)); o.add("data", converter.toJson(ls.data)); o.add("latent", converter.toJson(ls.latent)); result.add(o); } } } response.getWriter().println(result); response.getWriter().flush(); }