Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- def loadRes(): #Loading data from txt file
- if(os.stat("results.txt").st_size == 0):
- return False
- f = open("results.txt")
- rawdat = f.read()
- f.close()
- dat = rawdat.split("\n")
- dat.pop()
- for i in range(0,len(dat)):
- dat[i] = dat[i].split("|")
- #print(dat[i])
- dat[i][2] = dat[i][2].split("~")
- return dat
- def getNets(res):
- #print(res)
- if(res == False):
- return []
- results = []
- for i in res:
- results.append(i[2])
- return results
- #Stackoverflow example of how to convert bases easily https://stackoverflow.com/questions/28824874/pythonic-way-to-do-base-conversion
- def digit_to_char(digit):
- if digit < 10:
- return str(digit)
- return chr(ord('a') + digit - 10)
- def str_base(number, base):
- while number > 0:
- number, digit = divmod(number, base)
- yield digit_to_char(digit)
- def permuter(layers,nNodes):#Generate possible neural network combinations
- store = []
- check = []
- for i in range(0,nNodes**layers):
- val = (''.join(list(str_base(i,nNodes))))
- if(val == ''):
- val = "0"
- val = format(int(val[::-1]), '0'+str(layers))
- if((val.replace("0","") in check) == False):
- store.append(list(val))
- check.append(val.replace("0",""))
- return store
- import tensorflow as tf
- from tensorflow.keras import backend as K
- mnist = tf.keras.datasets.mnist #28x28
- (trainx, trainy), (testx, testy) = mnist.load_data()
- trainx = tf.keras.utils.normalize(trainx,axis=1)
- testx = tf.keras.utils.normalize(testx,axis=1)
- tf_config = tf.ConfigProto(allow_soft_placement=False)
- tf_config.gpu_options.allow_growth = True
- s = tf.Session(config=tf_config)
- K.set_session(s)
- def addLayers(layerData,neuronMultiplyer,model,base):#Add layers based on structure input
- model.add(tf.keras.layers.Flatten())
- for layer in layerData:
- layer = int(layer,base)
- if(layer!= 0):
- model.add(tf.keras.layers.Dense((layer)*neuronMultiplyer,activation=tf.nn.relu,kernel_initializer=tf.keras.initializers.glorot_uniform(1234),bias_initializer=tf.keras.initializers.glorot_uniform(1234)))
- return model
- import os,datetime,timeit,time
- def train(layerData,neuronMultiplyer,base):#Train and create neural network based on structure input
- f = open("results.txt", "a")
- os.system('cls')
- print(layerData)
- tf.keras.backend.clear_session() #Reset and clear session
- model = tf.keras.models.Sequential()
- model = addLayers(layerData,neuronMultiplyer,model,base)
- model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax,kernel_initializer=tf.keras.initializers.glorot_uniform(1234),bias_initializer=tf.keras.initializers.glorot_uniform(1234)))
- model.compile(optimizer='adam',
- loss='sparse_categorical_crossentropy',
- metrics=['accuracy'])
- model.fit(trainx,trainy,epochs=3,batch_size=256,use_multiprocessing=True, workers=10)
- start = time.perf_counter()
- valLoss,valAcc = model.evaluate(testx,testy)
- elapsed = time.perf_counter() - start #10000 samples takes this long.
- f.write(str(valLoss)+"|"+str(valAcc)+"|"+'~'.join(layerData)+"|"+str(elapsed)+"\n")
- return valLoss,valAcc,layerData
- def evaluate(layers,maxNeurons,inc):
- data = permuter(layers,int(maxNeurons//inc +1))
- fileDat = getNets(loadRes())
- for structure in data:
- if((structure in fileDat)==False):
- train(structure,inc,int(maxNeurons//inc +1))
- evaluate(5, 100, 20)
- input("Process is done, press enter to close.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement