Beispiel #1
0
    def __init__(self, parent=None):
        """
        Konstruktor klasy okna.
        Tworzy okno widoczne na ekranie i połączenia przycisków w stylu Qt.
        
        """
        QtGui.QWidget.__init__(self, parent)

        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.ib_zbiorTreningowy.clicked.connect(self.chooseFolder)
        self.ui.ib_zbudujTrenujSiec.clicked.connect(self.generateTrainSet)
        self.ui.ib_testuj.clicked.connect(self.testCustomText)
        self.ui.o_zbiorTreningowy.setText(QDir.currentPath() +
                                          QDir.separator() + u"testFolder")

        # Na początku nie mamy zadnej sieci
        self.siec_neuronowa = None
Beispiel #2
0
    def __init__(self, parent=None):
        """
        Konstruktor klasy okna.
        Tworzy okno widoczne na ekranie i połączenia przycisków w stylu Qt.
        
        """
        QtGui.QWidget.__init__(self, parent)

        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.ib_zbiorTreningowy.clicked.connect(self.chooseFolder)
        self.ui.ib_zbudujTrenujSiec.clicked.connect(self.generateTrainSet)
        self.ui.ib_testuj.clicked.connect(self.testCustomText)
        self.ui.o_zbiorTreningowy.setText(
            QDir.currentPath()+QDir.separator()+u"testFolder")
        
        # Na początku nie mamy zadnej sieci
        self.siec_neuronowa = None
Beispiel #3
0
class BmmsiWindow(QWidget):
    """
    Klasa obsługi interfejsu graficznego.
    Tworzy i zarządza oknem apliakcji.
    
    """
    def __init__(self, parent=None):
        """
        Konstruktor klasy okna.
        Tworzy okno widoczne na ekranie i połączenia przycisków w stylu Qt.
        
        """
        QtGui.QWidget.__init__(self, parent)

        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.ib_zbiorTreningowy.clicked.connect(self.chooseFolder)
        self.ui.ib_zbudujTrenujSiec.clicked.connect(self.generateTrainSet)
        self.ui.ib_testuj.clicked.connect(self.testCustomText)
        self.ui.o_zbiorTreningowy.setText(QDir.currentPath() +
                                          QDir.separator() + u"testFolder")

        # Na początku nie mamy zadnej sieci
        self.siec_neuronowa = None

    def chooseFolder(self):
        """ 
        Obsluga wyboru polozenia katalogu z danymi testowymi
        
        """
        dir = QtGui.QFileDialog.getExistingDirectory()
        self.ui.o_zbiorTreningowy.setText(dir)

    def generateTrainSet(self):
        """
        Gerneruje zestaw treningowy.
        Przeprowadza naukę sieci neuronowej.
        Parametry treningu sieci są pobierane z elementów GUI.

        Uwaga: Każdorazowo sieć tworzona jest na nowo.
        
        """

        if len(self.ui.o_zbiorTreningowy.text()) == 0:
            QMessageBox.warning(None, "BMMSI",
                                u"Należy podać istniejącą scieżkę")
            return

        gen = GenratorPlikuTestowego()
        gen.generuj(self.ui.o_zbiorTreningowy.text())

        if self.siec_neuronowa is not None:
            del self.siec_neuronowa
            self.siec_neuronowa = None

        ssn_params = [
            25,
        ]  #wartstwa wejściowa
        # warstwy ukryte
        for x in range(self.ui.i_iloscWarstwUkrytych.value()):
            ssn_params.append(self.ui.i_liczbaNeuronowWarstwaUkryta.value())
        # warstwa wyjściowa
        ssn_params.append(4)
        self.siec_neuronowa = SSN(
            2 + self.ui.i_iloscWarstwUkrytych.value(),
            ssn_params,
        )

        self.siec_neuronowa.logEntry.connect(self.addLineToLog)

        self.siec_neuronowa.train(
            (QDir.currentPath() + QDir.separator() + "test.txt"),
            liczbaEpok=self.ui.i_liczbaEpok.value(),
            N=self.ui.i_wspolczynnikUczenia.value(),
            M=self.ui.i_wspolczynnikMomentum.value(),
            min_blad=self.ui.i_limiWartosciBledu.value())

        self.ui.ib_testuj.setEnabled(True)

    def testCustomText(self):
        """
        Przeprowadza test dla wprowadzonego tekstu.
        
        """

        if len(self.ui.i_tekstWejsciowy.toPlainText()) == 0:
            QMessageBox.warning(None, "BMMSI", u"Należy podać tekst.")
            return

        wyn = [0, 0, 0, 0]
        wyn = self.siec_neuronowa.test(
            czestotliwosc(self.ui.i_tekstWejsciowy.toPlainText()))
        self.ui.o_en.setValue(wyn[0] * 100 if wyn[0] > 0 else 0)
        self.ui.o_de.setValue(wyn[1] * 100 if wyn[1] > 0 else 0)
        self.ui.o_pl.setValue(wyn[2] * 100 if wyn[2] > 0 else 0)
        self.ui.o_fr.setValue(wyn[3] * 100 if wyn[3] > 0 else 0)

    def addLineToLog(self, what):
        """
        Dodaje informacje do pola "log"
        
        """
        self.ui.o_log.appendPlainText('[' + str(datetime.now()) + '] ' + what)
Beispiel #4
0
class BmmsiWindow(QWidget):
    """
    Klasa obsługi interfejsu graficznego.
    Tworzy i zarządza oknem apliakcji.
    
    """
    
    
    def __init__(self, parent=None):
        """
        Konstruktor klasy okna.
        Tworzy okno widoczne na ekranie i połączenia przycisków w stylu Qt.
        
        """
        QtGui.QWidget.__init__(self, parent)

        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.ib_zbiorTreningowy.clicked.connect(self.chooseFolder)
        self.ui.ib_zbudujTrenujSiec.clicked.connect(self.generateTrainSet)
        self.ui.ib_testuj.clicked.connect(self.testCustomText)
        self.ui.o_zbiorTreningowy.setText(
            QDir.currentPath()+QDir.separator()+u"testFolder")
        
        # Na początku nie mamy zadnej sieci
        self.siec_neuronowa = None
        
        
    def chooseFolder(self):
        """ 
        Obsluga wyboru polozenia katalogu z danymi testowymi
        
        """
        dir = QtGui.QFileDialog.getExistingDirectory()
        self.ui.o_zbiorTreningowy.setText(dir)
        
        
    def generateTrainSet(self):
        """
        Gerneruje zestaw treningowy.
        Przeprowadza naukę sieci neuronowej.
        Parametry treningu sieci są pobierane z elementów GUI.

        Uwaga: Każdorazowo sieć tworzona jest na nowo.
        
        """
        
        if len (self.ui.o_zbiorTreningowy.text()) == 0:
            QMessageBox.warning(None, "BMMSI", u"Należy podać istniejącą scieżkę")
            return
        
        gen = GenratorPlikuTestowego()
        gen.generuj(self.ui.o_zbiorTreningowy.text())
        
        if self.siec_neuronowa is not None:
            del self.siec_neuronowa
            self.siec_neuronowa = None
            
        ssn_params = [25,] #wartstwa wejściowa
        # warstwy ukryte
        for x in range(self.ui.i_iloscWarstwUkrytych.value()):
            ssn_params.append(self.ui.i_liczbaNeuronowWarstwaUkryta.value())
        # warstwa wyjściowa
        ssn_params.append(4)
        self.siec_neuronowa = SSN( 2 + self.ui.i_iloscWarstwUkrytych.value(), 
                                  ssn_params,
                                  )
                                  
        self.siec_neuronowa.logEntry.connect(self.addLineToLog)
        
        self.siec_neuronowa.train((QDir.currentPath()+QDir.separator()+"test.txt"),
                                  liczbaEpok=self.ui.i_liczbaEpok.value(),
                                  N=self.ui.i_wspolczynnikUczenia.value(),
                                  M=self.ui.i_wspolczynnikMomentum.value(),
                                  min_blad = self.ui.i_limiWartosciBledu.value() )
                                  
        self.ui.ib_testuj.setEnabled(True)
                                 

    def testCustomText(self):
        """
        Przeprowadza test dla wprowadzonego tekstu.
        
        """
        
        if len(self.ui.i_tekstWejsciowy.toPlainText()) == 0:
            QMessageBox.warning(None, "BMMSI", u"Należy podać tekst.")
            return

        wyn = [0,0,0,0]
        wyn = self.siec_neuronowa.test(czestotliwosc( self.ui.i_tekstWejsciowy.toPlainText()  ) )
        self.ui.o_en.setValue(wyn[0]*100  if wyn[0] > 0 else 0)
        self.ui.o_de.setValue(wyn[1]*100  if wyn[1] > 0 else 0)
        self.ui.o_pl.setValue(wyn[2]*100  if wyn[2] > 0 else 0)
        self.ui.o_fr.setValue(wyn[3]*100  if wyn[3] > 0 else 0)
        
    def addLineToLog(self, what):
        """
        Dodaje informacje do pola "log"
        
        """
        self.ui.o_log.appendPlainText('['+str(datetime.now())+'] ' + what)