First commit
This commit is contained in:
67
getconvolutional.py
Normal file
67
getconvolutional.py
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__author__ = "Aleksey Lobanov"
|
||||
__copyright__ = "Copyright 2016, Aleksey Lobanov"
|
||||
__credits__ = ["Aleksey Lobanov"]
|
||||
__license__ = "MIT"
|
||||
__maintainer__ = "Aleksey Lobanov"
|
||||
__email__ = "i@likemath.ru"
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from keras.models import Sequential
|
||||
from keras.layers import Dense, Dropout, Activation, Flatten
|
||||
from keras.layers import Convolution2D
|
||||
|
||||
import numpy as np
|
||||
|
||||
from sklearn.cross_validation import train_test_split
|
||||
|
||||
from neurallife import generateData, getAccuracies, saveKeras
|
||||
|
||||
|
||||
def getModel(n):
|
||||
nn = Sequential()
|
||||
nn.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(1, n, n)))
|
||||
nn.add(Activation('relu'))
|
||||
nn.add(Dropout(0.25))
|
||||
nn.add(Flatten())
|
||||
nn.add(Dense(4*n**2,init="normal", activation="sigmoid"))
|
||||
nn.add(Dropout(0.15))
|
||||
nn.add(Dense(n**2,init="normal", activation="sigmoid"))
|
||||
nn.compile(loss="MSE", optimizer="nadam", metrics=[])
|
||||
return nn
|
||||
|
||||
N = 9 # board size
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
X_train, X_test, Y_train, Y_test = train_test_split(
|
||||
*generateData(N, 2*10**5),
|
||||
test_size=0.5,
|
||||
random_state=23
|
||||
)
|
||||
X_train = X_train.reshape((X_train.shape[0], 1, N, N))
|
||||
X_test = X_test.reshape((X_test.shape[0], 1, N, N))
|
||||
|
||||
nn = getModel(N)
|
||||
|
||||
cur_time = datetime.now()
|
||||
|
||||
nn.fit(X_train, Y_train, nb_epoch=20, shuffle=False, verbose=1)
|
||||
|
||||
cellAcc, boardAcc = getAccuracies(nn, X_test, Y_test)
|
||||
|
||||
print(("for board {}x{} with train size={} cell accuracy is {:.5f}%, " +
|
||||
"board accuracy is {:.5f}% and delta with theoretical board accuracy " +
|
||||
"is {:.8f}% it takes {}").format(
|
||||
N,
|
||||
N,
|
||||
X_train.shape[0],
|
||||
100 * cellAcc,
|
||||
100 * boardAcc,
|
||||
100 * abs(boardAcc - cellAcc**(N**2)),
|
||||
datetime.now() - cur_time
|
||||
))
|
||||
saveKeras(nn, "models/convolutional_{}_{}".format(N, X_train.shape[0]))
|
||||
Reference in New Issue
Block a user