Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.12 KB | None | 0 0
  1. import numpy as np
  2. import re
  3.  
  4. def main():
  5.    
  6.     choiceSettings = input("Use file settings?(y/n): ")
  7.    
  8.     if choiceSettings.lower() == "y":
  9.         settingsFile = open("Settings.txt", "r")
  10.         buffer = settingsFile.readlines()
  11.         settingsFile.close()
  12.        
  13.         inputLayerSize, hiddenLayersCount, outputLayerSize = [int(i) for i in buffer[0].split()]
  14.        
  15.         hiddenLayerSize = [float(i) for i in buffer[1].split()]
  16.        
  17.         rangeValuesInput = [list(i) for i in list(zip(*[iter([float(i) for i in buffer[2].split()])] * 2))]
  18.        
  19.         rangeValuesOutput = [list(i) for i in list(zip(*[iter([float(i) for i in buffer[3].split()])] * 2))]
  20.     else:
  21.         #Entering params of NN
  22.         inputLayerSize = int(input("InputLayerSize: "))
  23.         hiddenLayersCount = int(input("HiddenLayersCount: "))
  24.         hiddenLayerSize = [0] * hiddenLayersCount
  25.         for i in range(hiddenLayersCount):
  26.             hiddenLayerSize[i] = int(input("HiddenLayerSize[" + str(i) + "]: "))
  27.         outputLayerSize = int(input("OutputLayerSize: "))
  28.        
  29.         rangeValuesInput = [0] * inputLayerSize
  30.         for i in range(inputLayerSize):
  31.             rangeValuesInput[i] = [float(j) for j in input("RangeValuesInput[" + str(i) + "]: ").split()]
  32.        
  33.         rangeValuesOutput = [0] * outputLayerSize
  34.         for i in range(outputLayerSize):
  35.             rangeValuesOutput[i] = [float(j) for j in input("RangeValuesOutput[" + str(i) + "]: ").split()]
  36.        
  37.         ##############################################
  38.         settingsFile = open("Settings.txt", "w")
  39.         buffer = [""] * 4
  40.         buffer[0] = str(inputLayerSize) + " " + str(hiddenLayersCount) + " " + str(outputLayerSize) + "\n"
  41.         for i in range(hiddenLayersCount):
  42.             buffer[1] += (str(hiddenLayerSize[i]))
  43.             if i != hiddenLayersCount - 1:
  44.                 buffer[1] += " "
  45.             else:
  46.                 buffer[1] += "\n"
  47.        
  48.         for i in range(inputLayerSize):
  49.             buffer[2] += str(rangeValuesInput[i][0]) + " " + str(rangeValuesInput[i][1])
  50.             if i != inputLayerSize - 1:
  51.                 buffer[2] += " "
  52.             else:
  53.                 buffer[2] += "\n"
  54.        
  55.         for i in range(outputLayerSize):
  56.             buffer[3] += str(rangeValuesOutput[i][0]) + " " + str(rangeValuesOutput[i][1])
  57.             if i != outputLayerSize - 1:
  58.                 buffer[3] += " "
  59.             else:
  60.                 buffer[3] += "\n"
  61.        
  62.         settingsFile.writelines(buffer)
  63.         settingsFile.close()
  64.         ##############################################
  65.    
  66.     choiceTests = input("Use file tests?(y/n): ")
  67.    
  68.     if choiceTests.lower() == "y":
  69.         testsFile = open("Tests.txt", "r")
  70.         buffer = testsFile.readlines()
  71.         testsFile.close()
  72.        
  73.         testsCount = int(buffer[0])
  74.        
  75.         tests = [list(i) for i in list(zip(*[iter([float(i) for i in buffer[1].split()])] * inputLayerSize))]
  76.        
  77.         answers = [list(i) for i in list(zip(*[iter([float(i) for i in buffer[2].split()])] * outputLayerSize))]
  78.        
  79.         iterationsCount = int(buffer[3])
  80.         epsError = float(buffer[4])
  81.     else:
  82.         testsCount = int(input("TestsCount: "))
  83.        
  84.         tests = [0] * testsCount
  85.         answers = [0] * testsCount
  86.        
  87.         for i in range(testsCount):
  88.             #Entering tests of NN
  89.             tests[i] = [float(j) for j in input("Test[" + str(i) + "]: ").split()]
  90.            
  91.             answers[i] = [float(j) for j in input("Answer[" + str(i) + "]: ").split()]
  92.            
  93.             #Scaling data
  94.             for j in range(inputLayerSize):
  95.                 tests[i][j] = scale(tests[i][j], rangeValuesInput[j][0], rangeValuesInput[j][1], 0, 1)
  96.            
  97.             for j in range(outputLayerSize):
  98.                 answers[i][j] = scale(answers[i][j], rangeValuesOutput[j][0], rangeValuesOutput[j][1], 0, 1)
  99.        
  100.         iterationsCount = int(input("IterationsCount: "))
  101.         #Minimum error
  102.         epsError = float(input("EpsError: "))
  103.        
  104.         ##############################################
  105.         testsFile = open("Tests.txt", "w")
  106.        
  107.         buffer = [""] * 5
  108.         buffer[0] = str(testsCount) + "\n"
  109.         for i in range(testsCount):
  110.             for j in range(inputLayerSize):
  111.                 buffer[1] += str(tests[i][j])
  112.                 if i != inputLayerSize - 1 or i != testsCount - 1:
  113.                     buffer[1] += " "
  114.             if i == testsCount - 1:
  115.                 buffer[1] += "\n"
  116.        
  117.         for i in range(testsCount):
  118.             for j in range(outputLayerSize):
  119.                 buffer[2] += str(answers[i][j])
  120.                 if j != outputLayerSize - 1 or i != testsCount - 1:
  121.                     buffer[2] += " "
  122.             if i == testsCount - 1:
  123.                 buffer[2] += "\n"
  124.        
  125.         buffer[3] = str(iterationsCount) + "\n"
  126.         buffer[4] = str(epsError) + "\n"
  127.        
  128.         testsFile.writelines(buffer)
  129.         testsFile.close()
  130.         ##############################################
  131.        
  132.     choiceWeights = "n"
  133.     if choiceSettings.lower() == "y" and choiceTests.lower() == "y":
  134.         choiceWeights = input("Use file weights?(y/n): ")
  135.    
  136.     if choiceWeights.lower() == "y":
  137.         weights = []
  138.         for i in range(hiddenLayersCount + 1):
  139.             weights.append(np.loadtxt("Weights.txt"))
  140.         print(weights)
  141.     else:
  142.        
  143.         #Making np.array from list
  144.         mTests = np.array(tests)
  145.         mAnswers = np.array(answers)
  146.        
  147.         weights = [0] * (hiddenLayersCount + 1)
  148.         #Randomize weights
  149.         weights[0] = 2 * np.random.random((inputLayerSize, hiddenLayerSize[0])) - 1
  150.         for i in range(1, hiddenLayersCount):
  151.             weights[i] = 2 * np.random.random((hiddenLayerSize[i-1], hiddenLayerSize[i])) - 1
  152.         weights[hiddenLayersCount] = 2 * np.random.random((hiddenLayerSize[hiddenLayersCount - 1], outputLayerSize)) - 1
  153.        
  154.         layers = [0] * (hiddenLayersCount + 2)
  155.         layers[0] = mTests
  156.        
  157.         errors = [0] * (hiddenLayersCount + 1)
  158.         deltas = [0] * (hiddenLayersCount + 1)
  159.        
  160.         #Main loop of learning
  161.         for i in range(iterationsCount):
  162.             #Calculating layers
  163.             for j in range(1, hiddenLayersCount + 2):
  164.                 layers[j] = sigmoid(np.dot(layers[j - 1], weights[j - 1]))
  165.            
  166.             #Main error
  167.             errors[hiddenLayersCount] = mAnswers - layers[hiddenLayersCount + 1]
  168.            
  169.             #Checking the value of main error
  170.             if (np.mean(np.abs(errors[hiddenLayersCount])) < epsError):
  171.                 break
  172.            
  173.             #The last delta
  174.             deltas[hiddenLayersCount] = sigmoid(layers[hiddenLayersCount + 1], True) * errors[hiddenLayersCount]
  175.            
  176.             #Calculating errors and deltas
  177.             for j in range(hiddenLayersCount, 0, -1):
  178.                 errors[j - 1] = np.dot(deltas[j], weights[j].T)
  179.                 deltas[j - 1] = sigmoid(layers[j], True) * errors[j - 1]
  180.            
  181.             #Changing weights
  182.             for j in range(hiddenLayersCount + 1, 0, -1):
  183.                 weights[j - 1] += np.dot(layers[j-1].T, deltas[j - 1])
  184.            
  185.             if i % 100 == 0:
  186.                 print("Error:", str(np.mean(np.abs(errors[hiddenLayersCount]))))
  187.        
  188.         buffer = []
  189.         for i in weights:
  190.             buffer.append(" ".join(str(i).split()))
  191.         fileWeights = open("Weights.txt", "w")
  192.         #print(buffer)
  193.        
  194.     #Main loop of working
  195.     while True:
  196.         #Input data
  197.         inputLayer  = [float(i) for i in input("InputLayer: ").split()]
  198.        
  199.         #Calculating layers
  200.         layers[0] = np.array(inputLayer)
  201.         for i in range(1, hiddenLayersCount + 2):
  202.             layers[i] = sigmoid(np.dot(layers[i - 1], weights[i - 1]))
  203.        
  204.         #Output data
  205.         for i in range(outputLayerSize):
  206.             print("Answer[" + str(i) + "]: " + str(int(scale(layers[hiddenLayersCount + 1][i], 0, 1, rangeValuesOutput[i][0], rangeValuesOutput[i][1]) + 0.5)))
  207.        
  208. """
  209. sigmoid(x, deriv = False)
  210. returns sigmoid if deriv = False
  211. else returns derivative if x = sigmoid(a)
  212. """
  213. def sigmoid(x, deriv = False):
  214.     if deriv:
  215.         return x * (1 - x)
  216.     return 1 / (1 + np.exp(-x))
  217.  
  218. def scale(oldValue, oldMin, oldMax, newMin, newMax):
  219.     return (((oldValue - oldMin) * (newMax - newMin)) / (oldMax - oldMin)) + newMin
  220.  
  221. if __name__ == "__main__":
  222.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement