def __init__(self, network_model=None): QDialog.__init__(self) self.ui = Ui_NetworkCreator() self.ui.setupUi(self) self.model_ready = False self.network_model = network_model or NetworkModel(self.ui.minWeights.value(), self.ui.maxWeights.value()) self._setup_default_functions_comboboxes() self._setup_table() self._setup_network_parameters() self.ui.neuronsTable.setModel(self.network_model.default_layer()) self.model_ready = True
class NetworkCreatorDialog(QDialog): def __init__(self, network_model=None): QDialog.__init__(self) self.ui = Ui_NetworkCreator() self.ui.setupUi(self) self.model_ready = False self.network_model = network_model or NetworkModel(self.ui.minWeights.value(), self.ui.maxWeights.value()) self._setup_default_functions_comboboxes() self._setup_table() self._setup_network_parameters() self.ui.neuronsTable.setModel(self.network_model.default_layer()) self.model_ready = True def create_network(self): basic_network = NetworkCreator().create_network(self.network_model) return basic_network @pyqtSlot(int) def on_layersEdit_valueChanged(self, value): if self.model_ready: items_count = self.ui.layerComboBox.count() if value > items_count: for i in range(items_count + 1, value + 1): layer = self.network_model.add_layer() self.ui.layerComboBox.addItem(layer.layer_name()) elif value < items_count: for i in range(value, items_count): self.ui.layerComboBox.removeItem(i) self.network_model.remove_layer() @pyqtSlot(int) def on_neuronsEdit_valueChanged(self, neurons_number): if self.model_ready: layer_index = self.ui.layerComboBox.currentIndex() self.network_model.set_neurons_for_layer(layer_index, neurons_number) @pyqtSlot(int) def on_inputNeuronsEdit_valueChanged(self, value): if self.model_ready: self.network_model.set_network_input_neurons(value) @pyqtSlot(int) def on_layerComboBox_currentIndexChanged(self, layer_number): if self.model_ready: model = self.network_model.layer_model(layer_number) self.ui.neuronsTable.setModel(model) self.ui.neuronsEdit.setValue(model.rowCount()) self.ui.layerTypeSelector.setCurrentIndex(self.ui.layerTypeSelector.findText(model.layer_type())) @pyqtSlot(str) def on_defaultPSPComboBox_currentIndexChanged(self, value): if self.model_ready: self.ui.neuronsTable.model().set_default_psp(value) @pyqtSlot(str) def on_defaultActivationComboBox_currentIndexChanged(self, value): if self.model_ready: self.ui.neuronsTable.model().set_default_activation(value) def _setup_table(self): self.ui.neuronsTable.setItemDelegateForColumn(0, self._create_psp_combobox()) self.ui.neuronsTable.setItemDelegateForColumn(1, self._create_activator_combobox()) self.ui.neuronsTable.horizontalHeader().setResizeMode(QHeaderView.Stretch) def _setup_default_functions_comboboxes(self): self.ui.defaultPSPComboBox.addItems(PSPUtil.registered_psps()) self.ui.defaultActivationComboBox.addItems(ActivatorUtil.registered_activators()) self.ui.defaultActivationComboBox.setCurrentIndex( self.ui.defaultActivationComboBox.findText(ActivatorUtil.default_activator()) ) def _setup_network_parameters(self): self.ui.layerTypeSelector.addItems(Layers.layers_types()) self.ui.layerTypeSelector.setCurrentIndex( self.ui.layerTypeSelector.findText(Layers.default_layer()) ) self.ui.layersEdit.setValue(len(self.network_model.layers())) for layer in self.network_model.layers(): self.ui.layerComboBox.addItem(layer.layer_name()) self.ui.inputNeuronsEdit.setValue(self.network_model.network_inputs()) self.ui.neuronsEdit.setValue(self.network_model.default_layer().rowCount()) def _create_activator_combobox(self): return ComboBoxSelector(self.ui.neuronsTable, ActivatorUtil.registered_activators()) def _create_psp_combobox(self): return ComboBoxSelector(self.ui.neuronsTable, PSPUtil.registered_psps()) @pyqtSlot() def on_randomizeWeightsButton_clicked(self): self.ui.neuronsTable.model().randomize_weights(self.ui.minWeights.value(), self.ui.maxWeights.value()) @pyqtSlot(float) def on_minWeights_valueChanged(self, value): self.network_model.set_min_random_weights(value) @pyqtSlot(float) def on_maxWeights_valueChanged(self, value): self.network_model.set_max_random_weights(value) @pyqtSlot(str) def on_layerTypeSelector_currentIndexChanged(self, value): if self.model_ready: self.ui.neuronsTable.model().set_layer_type(value)