Ребята, пытаюсь обучить сеть на распознавание двух фраз, воспользовался
вот этой ссылкой для создания mfcc-коэффициентов их собственно и подаю на вход сети. При validationProportion=0.25 сеть сводится, но с большой ошибкой, при значении 0.1 за 3 дня не сошлась. Вопрос: происходит это из-за сильной разрозненности данных или алгоритм обучения и архитектура сети неверные?
import pybrain
from pybrain.datasets import *
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
import pickle
import numpy as np
def main():
ds = SupervisedDataSet(12, 1)
hello1 = np.load("C://Python27/QPSK/numpyarray/hello1.npy")
hello2 = np.load("C://Python27/QPSK/numpyarray/hello2.npy")
hello3 = np.load("C://Python27/QPSK/numpyarray/hello3.npy")
bugs = np.load("C://Python27/QPSK/numpyarray/bugs.npy")
b1 = np.load("C://Python27/QPSK/numpyarray/bye-bye-1.npy")
b2 = np.load("C://Python27/QPSK/numpyarray/bye-bye-2.npy")
b3 = np.load("C://Python27/QPSK/numpyarray/bye-bye-3.npy")
b4 = np.load("C://Python27/QPSK/numpyarray/bye-bye-4.npy")
b5 = np.load("C://Python27/QPSK/numpyarray/bye-bye-5.npy")
b6 = np.load("C://Python27/QPSK/numpyarray/bye-bye-6.npy")
ds.addSample( (hello1[0:12]), (0,))
ds.addSample( (hello2[0:12]), (0,))
ds.addSample( (hello3[0:12]), (0,))
ds.addSample( (b1[0:12]), (1,))
ds.addSample( (b2[0:12]), (1,))
ds.addSample( (b4[0:12]), (1,))
ds.addSample( (b5[0:12]), (1,))
ds.addSample( (b6[0:12]), (1,))
net = buildNetwork(12, 24, 1, bias=True)
try:
f = open('_learned2', 'r')
net = pickle.load(f)
f.close()
except:
trainer = BackpropTrainer(net, ds, learningrate = 0.01, momentum = 0.99, verbose = False)
errors = trainer.trainUntilConvergence(dataset=None, maxEpochs=None, verbose=None, continueEpochs=10, validationProportion=0.25)
f = open('_learned2', 'w')
pickle.dump(net, f)
f.close()
print np.round(net.activate(hello1[0:12])[0]), np.round(net.activate(hello2[0:12])[0]), np.round(net.activate(hello3[0:12])[0])
print np.round(net.activate(bugs[0:12])[0])
print np.round(net.activate(b3[0:12])[0])
print np.round(net.activate(b1[0:12])[0]), np.round(net.activate(b2[0:12])[0]), np.round(net.activate(b4[0:12])[0]), np.round(net.activate(b5[0:12])[0]), np.round(net.activate(b6[0:12])[0])
if __name__ == "__main__":
main()
Примеры numpy массивов
прикладываю.