init_mut_std = 1e-3 init_cross_p = 0.7 model = Model() model.add(Convolutional(num_filters, filter_size, filter_size, pad=pad)) model.add(ActivationLayer(Activations.tanh)) model.add(MaxPooling(pool_size, pool_size)) model.add(PReLULayer()) model.add(Dropout(dropout_p)) model.add(FullyConnected(bias_initializer=Initializers.glorot_uniform)) model.add(ActivationLayer(Activations.alt_softmax)) model.compile(X_train, y_train) X_batches, y_batches, num_batches = \ ok.make_batches(X_train, y_train, batch_size) def initialize(population_size): population = [] for i in range(population_size): model.randomize_params(X_train, y_train) individual = {'genome': model.get_params_as_vec()} individual['genome'] = np.append(individual['genome'], [init_mut_std, init_mut_p, init_cross_p]) population.append(individual) return population def evaluate(population): for individual in population: model.set_params_as_vec(individual['genome'][:-3])
tree.add_layer(PReLULayer()) tree.add_layer(FullyConnected()) tree.add_layer(ActivationLayer(Activations.tanh)) tree.add_input(X_reward[0]) tree.add_input(X_reward[1]) model = Model() model.set_tree(tree) model.set_loss(Losses.MeanSquared()) learning_rate = 0.00002 model.set_optimizer(Optimizers.RMSprop(learning_rate=learning_rate)) # model.compile(X_reward, y_reward) # model.train(X_reward, y_reward, 24) reinforce_index = X_obs.shape[0] X_batches, y_batches, num_batches = ok.make_batches([X_train], y_train, batch_size=10000) for i in range(8): print('\n---Iteration {}---'.format(i + 1)) for X_batch, y_batch in zip(X_batches, y_batches): model.train(X_reward, y_reward, 24) accuracy, preds = model.get_dream_accuracy([X_batch[0], None], y_batch) preds = preds[0] preds += Initializers.normal(preds.shape, 0.01) print('Accuracy: {}%'.format(accuracy)) preds_reward = reward(preds.reshape(preds.shape[0], preds.shape[1]).astype('float32'), y_batch.reshape(preds.shape[0], preds.shape[1]).astype('float32')) print('Avg Reward: {}'.format(np.mean(preds_reward))) X_reward[0] = np.append(X_reward[0], X_batch[0], axis=0) X_reward[1] = np.append(X_reward[1], preds, axis=0) y_reward = np.append(y_reward, preds_reward.reshape(preds_reward.shape[0], 1), axis=0) params = model.get_params_as_vec()