Пример #1
0
#! /usr/bin/python

from ann import ANN

ann = ANN()
ann.loadData()

inputSample = [0.0, 0.0, 0.2407407407407407, 0.79894179894179895, 0.0 , 0.0, 0.10317460317460314, 0.88095238095238093, 0.95767195767195767, 0.11528822055137844 , 0.010582010582010581, 0.74338624338624337, 0.64550264550264558, 0.8306878306878307, 0.35839598997493738 , 0.49470899470899465, 0.8306878306878307, 0.53968253968253976, 0.67460317460317465, 0.62155388471177941 , 0.75396825396825395, 0.19047619047619047, 0.0, 0.082010582010581978, 0.77694235588972438]

ann.activate(inputSample)
print ann.outputs
Пример #2
0
class ANN_Trainer:
    def __init__(self, userid):
        self.userid = userid

        self.inputSamples = []
        self.desiredOutputs = []

        for s in models.Ann_samples.objects.filter(userid=userid):
            self.inputSamples.append(eval(s.input))
            self.desiredOutputs.append(eval(s.output))

        self.learningRate = 0.1

        self.init()

    def __del__(self):
        del self.inputSamples
        del self.desiredOutputs

    def init(self):
        self.ann = ANN(self.userid)
        if self.ann.loadData():
            return

        self.ann.init([25, 30, 20, 26])

    def addData(self, inputSamples, desiredOutputs):
        self.sum_errors_prev = [1000, 1000]
        self.sum_errors_last = [1000, 1000]

        self.inputSamples += inputSamples
        self.desiredOutputs += desiredOutputs

    def updateLearningRate(self, sum_errors, sum_errors_prev):
        err = sum_errors[0]
        err_prev = sum_errors_prev[0]

        if err_prev == 0.0:
            return

        if err / err_prev > 1.04:
            self.learningRate *= 0.7
        if err < err_prev:
            self.learningRate *= 1.05

        if self.learningRate > 3.0:
            self.learningRate = 0.1

    def saveData(self, se, episode):
        data = [se, self.sum_errors_last, self.learningRate, episode]

        if not models.Ann_trainer_data.objects.filter(userid=self.userid):
            models.Ann_trainer_data.objects.create(userid=self.userid, data=str(data))
        else:
            models.Ann_trainer_data.objects.filter(userid=self.userid).update(data=str(data))

        del data

    def loadData(self):
        if not models.Ann_trainer_data.objects.filter(userid=self.userid):
            return 0

        data = eval(models.Ann_trainer_data.objects.get(userid=self.userid).data)

        # del self.sum_errors_prev
        # del self.sum_errors_last
        # self.sum_errors_prev = data[0]
        # self.sum_errors_last = data[1]
        self.learningRate = data[2]
        res = data[3]

        del data
        return res

    def train(self, max_error):
        self.sum_errors_prev = [1000, 1000]
        self.sum_errors_last = [1000, 1000]

        episode = self.loadData()

        while True:
            sum_errors = [0, 0]

            for i in range(len(self.inputSamples)):
                self.ann.activate(self.inputSamples[i])

                err = self.ann.updateErrorGradients(self.desiredOutputs[i])
                sum_errors[0] += err[0]
                sum_errors[1] += err[1]
                del err

                if i < len(self.inputSamples) - 1:
                    self.ann.updateWeights(self.learningRate)

            self.updateLearningRate(sum_errors, self.sum_errors_prev)

            if not episode % 10:
                if sum_errors[0] < self.sum_errors_last[0]:
                    self.ann.saveData()
                    # print "net data saved to file ..."
                    self.saveData(sum_errors, episode)
                    # print "trainer data saved to file ..."

                    self.sum_errors_last[0] = sum_errors[0]
                    self.sum_errors_last[1] = sum_errors[1]

                    # print sum_errors, self.learningRate
                    # print "episode =", episode
                    # print "---------------------------"

                    # if sum_errors[0] < 1.5:
                if sum_errors[0] < max_error:
                    break

            self.ann.updateWeights(self.learningRate)

            del self.sum_errors_prev
            self.sum_errors_prev = sum_errors
            episode += 1
Пример #3
0
class ANN_Trainer:
	def __init__(self, userid):
		self.userid = userid

		self.inputSamples = []
		self.desiredOutputs = []

		for s in models.Ann_samples.objects.filter(userid=userid):
			self.inputSamples.append(eval(s.input))
			self.desiredOutputs.append(eval(s.output))

		self.learningRate = 0.1

		self.init()

	def __del__(self):
		del self.inputSamples
		del self.desiredOutputs

	def init(self):
		self.ann = ANN(self.userid)
		if self.ann.loadData():
			return

		self.ann.init([25, 30, 20, 26])


	def addData(self, inputSamples, desiredOutputs):
		self.sum_errors_prev = [1000, 1000]
		self.sum_errors_last = [1000, 1000]

		self.inputSamples += inputSamples
		self.desiredOutputs += desiredOutputs

	def updateLearningRate(self, sum_errors, sum_errors_prev):
		err = sum_errors[0]
		err_prev = sum_errors_prev[0]

		if err_prev == 0.0:
			return

		if err / err_prev > 1.04:
			self.learningRate *= 0.7
		if err < err_prev:
			self.learningRate *= 1.05

		if self.learningRate > 3.0:
			self.learningRate = 0.1

	def saveData(self, se, episode):
		data = [se, self.sum_errors_last, self.learningRate, episode]

		if not models.Ann_trainer_data.objects.filter(userid=self.userid):
			models.Ann_trainer_data.objects.create(userid=self.userid, data=str(data))
		else:
			models.Ann_trainer_data.objects.filter(userid=self.userid).update(data=str(data))

		del data


	def loadData(self):
		if not models.Ann_trainer_data.objects.filter(userid=self.userid):
			return 0

		data = eval(models.Ann_trainer_data.objects.get(userid=self.userid).data)

		#del self.sum_errors_prev
		#del self.sum_errors_last
		#self.sum_errors_prev = data[0]
		#self.sum_errors_last = data[1]
		self.learningRate = data[2]
		res = data[3]

		del data
		return res

	def train(self, max_error):
		self.sum_errors_prev = [1000, 1000]
		self.sum_errors_last = [1000, 1000]

		episode = self.loadData()

		while True:
			sum_errors = [0, 0]

			for i in range(len(self.inputSamples)):
				self.ann.activate(self.inputSamples[i])

				err = self.ann.updateErrorGradients(self.desiredOutputs[i])
				sum_errors[0] += err[0]
				sum_errors[1] += err[1]
				del err

				if i < len(self.inputSamples) - 1:
					self.ann.updateWeights(self.learningRate)

			self.updateLearningRate(sum_errors, self.sum_errors_prev)

			if not episode % 10:
				if sum_errors[0] < self.sum_errors_last[0]:
					self.ann.saveData()
					#print "net data saved to file ..."
					self.saveData(sum_errors, episode)
					#print "trainer data saved to file ..."

					self.sum_errors_last[0] = sum_errors[0]
					self.sum_errors_last[1] = sum_errors[1]

				# print sum_errors, self.learningRate
				#print "episode =", episode
				#print "---------------------------"

				#if sum_errors[0] < 1.5:
				if sum_errors[0] < max_error:
					break

			self.ann.updateWeights(self.learningRate)

			del self.sum_errors_prev
			self.sum_errors_prev = sum_errors
			episode += 1
Пример #4
0
class ANN_Trainer:
	def __init__(self, userid):
		self.userid = userid

		self.inputSamples = []
		self.desiredOutputs = []

		for s in models.Ann_samples.objects.filter(userid=userid):
			self.inputSamples.append(eval(s.input))
			self.desiredOutputs.append(eval(s.output))

		self.init()

	def __del__(self):
		del self.inputSamples
		del self.desiredOutputs

	def init(self):
		self.ann = ANN(self.userid)
		if self.ann.loadData():
			return

		self.ann.init([25, 30, 20, 26])


	def addData(self, inputSamples, desiredOutputs):
		self.sum_errors_last = [1000, 1000]

		self.inputSamples   += inputSamples
		self.desiredOutputs += desiredOutputs

	def saveData(self, se, episode):
		data = [se, episode]

		if not models.Ann_trainer_rp_data.objects.filter(userid=self.userid):
			models.Ann_trainer_rp_data.objects.create(userid=self.userid, data=str(data))
		else:
			models.Ann_trainer_rp_data.objects.filter(userid=self.userid).update(data=str(data))

		del data

	def loadData(self):
		return 0

		if not models.Ann_trainer_rp_data.objects.filter(userid=self.userid):
			return 0

		data = eval(models.Ann_trainer_rp_data.objects.get(userid=self.userid).data)

		#del self.sum_errors_last
		#self.sum_errors_last = data[0]
		res = data[1]

		del data
		return res

	def train(self, max_error):
		self.sum_errors_last = [1000, 1000]

		episode = self.loadData()

		while True:
			sum_errors = [0, 0]

			for i in range(len(self.inputSamples)):
				self.ann.activate(self.inputSamples[i])

				err = self.ann.updateErrorGradients(self.desiredOutputs[i])
				sum_errors[0] += err[0]
				sum_errors[1] += err[1]
				del err

				self.ann.updateWeights_slope()

			#print sum_errors[0]
			if not episode % 10:
				if sum_errors[0] < self.sum_errors_last[0]:
					self.ann.saveData()
					#print "net data saved to file ..."
					self.saveData(sum_errors, episode)
					#print "trainer data saved to file ..."

					self.sum_errors_last[0] = sum_errors[0]
					self.sum_errors_last[1] = sum_errors[1]

				#print sum_errors
				#print "episode =", episode
				#print "---------------------------"

				if sum_errors[0] < max_error:
					break

			self.ann.updateWeights()

			del sum_errors
			episode += 1