# Alan Zheng, December 2017 ## Imports import csv import numpy as np from keras.models import Sequential from keras.models import load_model from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Convolution2D, MaxPooling2D from keras.optimizers import RMSprop from keras.utils import np_utils import tensorflow as tf import pickle ## 1. Load in data rows = [] with open('facetrain.csv', newline='\n') as csvfile: reader = csv.reader(csvfile, delimiter=',') for row in reader: rows.append(row) x = [] y = [] for i in range(len(rows)): if i == 0: continue x.append(row[30].split(" ")) y.append(row[0:30]) print(len(x)) print(len(x[0])) print(len(y)) print(len(y[0])) x = np.array(x) y = np.array(y) x = x.reshape(5000, 96, 96, 1) x = x.astype('float32') x /= 255 y = y.reshape(5000, 30) y = y.astype('float32') ## 2. Create model model = Sequential() model.add(Convolution2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(30, activation='linear')) model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse']) ## 3. Fit model on training data #model = load_model("facemodel.h5") load weights from previous run print(model.summary()) model.fit(x, y, batch_size=32, epochs=30, verbose=1) #model.save("facemodel.h5") save weights ## 4. Load in test data rows = [] with open('facetest.csv', newline='\n') as csvfile: reader = csv.reader(csvfile, delimiter=',') for row in reader: rows.append(row[1].split(" ")) rows = rows[1:] x_test = rows x_test = np.array(x_test) x_test= x_test.reshape(2049, 96, 96, 1) x_test = x_test.astype("float32") x_test/=255 ## 5. Run predictions and save output y_test = model.predict(x_test) output = [] header = [] header.append("ImageID.FeatureID") header.append("Value") output.append(header) for i in range(2049): for x in range(30): row = [] row.append(str(i + 1) + "." + str(x + 1)) # We start Ids at 1, so we need to add 1 to each value row.append(y_test[i][x]) output.append(row) with open('faceoutput.csv', 'w', newline='\n') as f: writer = csv.writer(f) writer.writerows(output)