In [3]:
import os
import numpy as np
from pandas.io.parsers import read_csv
from sklearn.utils import shuffle
FTRAIN = 'new/train.csv'
FTEST = 'new/test.csv'
def load(test=False, cols=None):
fname = FTEST if test else FTRAIN
df = read_csv(os.path.expanduser(fname)) # load pandas dataframe
df['Image'] = df['Image'].apply(lambda im: np.fromstring(im, sep=' '))
if cols:
df = df[list(cols) + ['Image']]
print(df.count()) # prints the number of values for each column
df = df.dropna() # drop all rows that have missing values in them
X = np.vstack(df['Image'].values) / 255. # scale pixel values to [0, 1]
X = X.astype(np.float32)
if not test: # only FTRAIN has any target columns
y = df[df.columns[:-1]].values
y = (y - 48) / 48 # scale target coordinates to [-1, 1]
X, y = shuffle(X, y, random_state=2) # shuffle train data
y = y.astype(np.float32)
else:
y = None
return X, y
X, y = load()
In [4]:
#тут буде частина кода, яка відповідає за оптимізацію слоїв
#і буде служити для відкладки потрібних параметрів виборок
print("output_num_units == {}; y.min == {:.3f}; y.max == {:.3f}".format(y.shape, y.min(), y.max()))
In [5]:
#Кусок коду, який відповідає за створення моделі картинки
#в вид придатний для свертки
def load2d(test=False, cols=None):
X, y = load(test=test)
X = X.reshape(-1, 1, 96, 96)
return X, y
In [8]:
#А тут код який загрузить нашу нейронну мережу
import cPickle as pickle
input = open('vova.pickle','rb')
net1=pickle.load(input)
input.close()
In [10]:
from graphviz import Digraph
import pydotplus
from nolearn.lasagne.visualize import draw_to_notebook
from nolearn.lasagne.visualize import plot_loss
from nolearn.lasagne.visualize import plot_conv_weights
from nolearn.lasagne.visualize import plot_conv_activity
from nolearn.lasagne.visualize import plot_occlusion
from nolearn.lasagne.visualize import plot_saliency
In [11]:
#потрібна інсталяція graphviz sudo apt-get install graphviz
draw_to_notebook(net1)
Out[11]:
In [48]:
print("result")
In [12]:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
In [13]:
plot_loss(net1)
plt.show()
In [41]:
def plot_sample(x, y, axis):
img = x.reshape(96, 96)
axis.imshow(img, cmap='gray', interpolation='none') #добавив інтерполяцію
axis.scatter(y[0::2] * 48 + 48, y[1::2] * 48 + 48, marker='x', s=1)
X, _ = load2d(test=True)
y_pred = net1.predict(X)
fig = plt.figure(figsize=(24, 24)) #розміри фігури
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)
for i in range(1):
ax = fig.add_subplot(4, 4, i + 1)
ax.set_title("Picture:") #заголовок
ax.set_xticks([]) #рамка по х
ax.set_yticks([]) # рамка по н
plot_sample(X[i], y_pred[i], ax)
In [44]:
fig.savefig('data.png')
fig.show()
In [47]:
from PIL import Image
img = Image.open("data.png")
img2 = img.rotate(180)
img2.save("img2.png")
In [15]:
plot_conv_weights(net1.layers_[1], figsize=(4, 4))
plt.show()
In [27]:
plot_conv_activity(net1.layers_[1], X[0:2])
plt.show()
In [17]:
plot_saliency(net1, X[0:2]);
plt.show()