Практическое задание №6
1. Запустите jupyter notebook, создайте тетрадку в папке с данными, импортируйте следующие модули
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
2. Считайте lfw датасет
data,attrs = fetch_lfw_dataset(dimx=36,dimy=36)
3. Распечатайте случайную фотографию
plt.imshow(data[np.random.randint(data.shape[0])], cmap="gray", interpolation="none")
4. Создайте нейронную сеть, которая отвечает за генерацию новых изображений
CODE_SIZE = 256
generator = Sequential()
generator.add(L.InputLayer([CODE_SIZE],name='noise'))
generator.add(L.Dense(10*8*8, activation='elu'))
generator.add(L.Reshape((8,8,10)))
generator.add(L.Deconv2D(64,kernel_size=(5,5),activation='elu'))
generator.add(L.Deconv2D(64,kernel_size=(5,5),activation='elu'))
generator.add(L.UpSampling2D(size=(2,2)))
generator.add(L.Deconv2D(32,kernel_size=3,activation='elu'))
generator.add(L.Deconv2D(32,kernel_size=3,activation='elu'))
generator.add(L.Deconv2D(32,kernel_size=3,activation='elu'))
generator.add(L.Conv2D(3,kernel_size=3,activation=None))
5. Создайте нейронную сеть, которая отвечает за классификацию сгенерированных изображений и настоящих
discriminator = Sequential()
discriminator.add(L.InputLayer(IMG_SHAPE))
….
discriminator.add(L.Flatten())
discriminator.add(L.Dense(256,activation='tanh'))
discriminator.add(L.Dense(2,activation=tf.nn.log_softmax))
6. Натренируйте обе нейронные сети
d_loss = -tf.reduce_mean(logp_real[:,1] + logp_gen[:,0])
d_loss += tf.reduce_mean(discriminator.layers[-1].kernel**2)
disc_optimizer = tf.train.GradientDescentOptimizer(1e-3).minimize(d_loss,var_list=discriminator.trainable_weights)
g_loss = ...
gen_optimizer = tf.train.AdamOptimizer(1e-4).minimize(g_loss,var_list=generator.trainable_weights)
s.run(tf.global_variables_initializer())
7. Примените натренированный генератор к случайному вектору и оцените качество результирующего изображения
feed_dict = {
real_data:sample_data_batch(100),
noise:sample_noise_batch(100)
}
for i in range(5):
s.run(disc_optimizer,feed_dict)
s.run(gen_optimizer,feed_dict)
8. (Самостоятельная работа) Сделайте оптимизацию гиперпараметров и попробуйте уменьшить значение функции потерь на валидационной выборке