def createPerceptronClassifier(img, samples, class_names, n_samples, ops=None, filepath=None, params={}): mp = MultilayerPerceptron() if "learning_rate" in params: # In (0, 1] mp.setLearningRate(params.get("learning_rate", mp.getLearningRate())) # Number of nodes per layer: a set of comma-separated values (numbers), or: # 'a' = (number of attributes + number of classes) / 2 # 'i' = number of attributes, # 'o' = number of classes # 't' = number of attributes + number of classes. # See MultilayerPerceptron.setHiddenLayers # https://weka.sourceforge.io/doc.dev/weka/classifiers/functions/MultilayerPerceptron.html#setHiddenLayers-java.lang.String- mp.setHiddenLayers(params.get("hidden_layers", "10,5")) return trainClassifier(mp, img, samples, class_names, n_samples, ops=ops, filepath=filepath)
for i in range(len(channels)): stack.addSlice("channel" + str(i + 1), channels[i].getProcessor()) # create empty feature stack features = FeatureStack(stack.getWidth(), stack.getHeight(), False) # set my features to the feature stack features.setStack(stack) # put my feature stack into the array featuresArray.set(features, 0) featuresArray.setEnabledFeatures(features.getEnabledFeatures()) mp = MultilayerPerceptron() hidden_layers = "%i,%i,%i" % (20, 14, 8) mp.setHiddenLayers(hidden_layers) mp.setLearningRate(0.7) mp.setDecay(True) mp.setTrainingTime(200) mp.setMomentum(0.3) wekaSegmentation = WekaSegmentation(image) wekaSegmentation.setFeatureStackArray(featuresArray) wekaSegmentation.setClassifier(mp) wekaSegmentation.addExample(0, posroi, 1) wekaSegmentation.addExample(1, negroi, 1) wekaSegmentation.trainClassifier() wekaSegmentation.saveClassifier(folder + "\\vessel-classifier_big.model") output = wekaSegmentation.applyClassifier(image, featuresArray, 0, True)