-
Notifications
You must be signed in to change notification settings - Fork 6.6k
/
deep_learning.py
51 lines (44 loc) · 1.84 KB
/
deep_learning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
deep_learning
~~~~~~~~~~~~~
Module to do deep learning. Most of the functionality needed is
already in the ``backprop2`` and ``deep_autoencoder`` modules, but
this adds convenience functions to help in doing things like unrolling
deep autoencoders, and adding and training a classifier layer."""
# My Libraries
from backprop2 import Network
from deep_autoencoder import DeepAutoencoder
def unroll(deep_autoencoder):
"""
Return a Network that contains the compression stage of the
``deep_autoencoder``."""
net = Network(deep_autoencoder.layers)
net.weights = deep_autoencoder.weights[:len(deep_autoencoder.layers)-1]
net.biases = deep_autoencoder.biases[:len(deep_autoencoder.layers)-1]
return net
def add_classifier_layer(net, num_outputs):
"""
Return the Network ``net``, but with an extra layer containing
``num_outputs`` neurons appended."""
net_classifier = Network(net.sizes+[num_outputs])
net_classifier.weights[:-1] = net.weights
net_classifier.biases[:-1] = net.biases
return net_classifier
def SGD_final_layer(
self, training_data, epochs, mini_batch_size, eta, lmbda):
"""
Run SGD on the final layer of the Network ``self``. Note that
``training_data`` is the input to the whole Network, not the
encoded training data input to the final layer.
"""
encoded_training_data = [
(self.feedforward(x, start=0, end=self.num_layers-2), y)
for x, y in training_data]
net = Network(self.sizes[-2:])
net.biases[0] = self.biases[-1]
net.weights[0] = self.weights[-1]
net.SGD(encoded_training_data, epochs, mini_batch_size, eta, lmbda)
self.biases[-1] = net.biases[0]
self.weights[-1] = net.weights[0]
# Add the SGD_final_layer method to the Network class
Network.SGD_final_layer = SGD_final_layer