In [1]:
from time import time
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.datasets import fetch_mldata
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sknn.mlp import Classifier, Layer

In [2]:
np.set_printoptions(precision=4)
np.set_printoptions(suppress=True)

In [3]:
mnist = fetch_mldata('mnist-original')
X_train, X_test, y_train, y_test = train_test_split(
        (mnist.data / 255.0).astype(np.float32),
        mnist.target.astype(np.int32),
        test_size=0.33, random_state=1234)

In [4]:
print "test data :  %s rows  %s columns" %(X_train.shape[0], X_train.shape[1])
print "test data :  %s rows  %s columns" %(X_test.shape[0], X_test.shape[1])


test data :  46900 rows  784 columns
test data :  23100 rows  784 columns

In [5]:
clf = Classifier(
        layers=[Layer("Rectifier", units=300), Layer("Softmax")],
        learning_rate=0.02,
        batch_size=100,
        n_iter=2,
        verbose=1,
)
clf.fit(X_train, y_train)


Out[5]:
Classifier(batch_size=100, debug=False, dropout_rate=None, f_stable=0.001,
      hidden0=<sknn.nn.Layer `Rectifier`: name=u'hidden0', units=300>,
      layers=[<sknn.nn.Layer `Rectifier`: name=u'hidden0', units=300>, <sknn.nn.Layer `Softmax`: name=u'output', units=10>],
      learning_momentum=0.9, learning_rate=0.02, learning_rule=u'sgd',
      loss_type=u'mse', n_iter=2, n_stable=50,
      output=<sknn.nn.Layer `Softmax`: name=u'output', units=10>,
      random_state=None, regularize=None, valid_set=None, valid_size=0.0,
      verbose=1, weight_decay=None)

In [6]:
print [l for l in clf.mlp.layers] 
inf = [(l.get_weights(), l.get_biases()) for l in clf.mlp.layers]


[<pylearn2.models.mlp.RectifiedLinear object at 0x1096d6450>, <pylearn2.models.mlp.Softmax object at 0x1096d6490>]

In [7]:
clf.mlp.layers[0].get_weights()
clf.mlp.layers[0].get_weights()


Out[7]:
array([[ 0.0264, -0.0244,  0.0967, ..., -0.0729, -0.0582, -0.0677],
       [-0.0091, -0.0454,  0.0945, ..., -0.005 ,  0.053 , -0.0547],
       [ 0.022 ,  0.008 , -0.0589, ..., -0.0132, -0.0036, -0.082 ],
       ..., 
       [ 0.097 ,  0.0583,  0.0792, ..., -0.0572, -0.0132,  0.0159],
       [ 0.0854,  0.0719, -0.084 , ..., -0.07  , -0.0058,  0.0634],
       [-0.0153,  0.0642,  0.0725, ..., -0.1052, -0.0224,  0.0219]])

In [8]:
l = Layer("Rectifier", units=300)
clf1 = Classifier(layers=[l])

In [10]:
clf1._initialize(X_test)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-ecc79abfcf03> in <module>()
----> 1 clf1._initialize(X_test)

TypeError: _initialize() takes exactly 3 arguments (2 given)

In [11]:
clf1.mlp.layers[0].set_weights(inf[0][0])
clf1.mlp.layers[0].set_biases(inf[0][1])


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-11-93bc00c0264c> in <module>()
----> 1 clf1.mlp.layers[0].set_weights(inf[0][0])
      2 clf1.mlp.layers[0].set_biases(inf[0][1])

AttributeError: 'NoneType' object has no attribute 'layers'

In [12]:
clf1.predict(X_test)


WARNING:sknn:Computing estimates with an untrained network.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-d876bb2f91fc> in <module>()
----> 1 clf1.predict(X_test)

/Users/dikien/anaconda/lib/python2.7/site-packages/scikit_neuralnetwork-0.2-py2.7.egg/sknn/mlp.pyc in predict(self, X)
    508         """
    509         y = self.predict_proba(X)
--> 510         return self.label_binarizer.inverse_transform(y, threshold=0.5)

/Users/dikien/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.pyc in inverse_transform(self, Y, threshold)
    369         of inverse_transform.
    370         """
--> 371         self._check_fitted()
    372 
    373         if threshold is None:

/Users/dikien/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.pyc in _check_fitted(self)
    287     def _check_fitted(self):
    288         if not hasattr(self, "classes_"):
--> 289             raise ValueError("LabelBinarizer was not fitted yet.")
    290 
    291     def fit(self, y):

ValueError: LabelBinarizer was not fitted yet.

In [14]:
clf1.mlp.layers[0].set_weights(inf[0][0])
clf1.mlp.layers[0].set_biases(inf[0][1])

In [15]:
clf1.predict(X_test)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-d876bb2f91fc> in <module>()
----> 1 clf1.predict(X_test)

/Users/dikien/anaconda/lib/python2.7/site-packages/scikit_neuralnetwork-0.2-py2.7.egg/sknn/mlp.pyc in predict(self, X)
    508         """
    509         y = self.predict_proba(X)
--> 510         return self.label_binarizer.inverse_transform(y, threshold=0.5)

/Users/dikien/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.pyc in inverse_transform(self, Y, threshold)
    369         of inverse_transform.
    370         """
--> 371         self._check_fitted()
    372 
    373         if threshold is None:

/Users/dikien/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.pyc in _check_fitted(self)
    287     def _check_fitted(self):
    288         if not hasattr(self, "classes_"):
--> 289             raise ValueError("LabelBinarizer was not fitted yet.")
    290 
    291     def fit(self, y):

ValueError: LabelBinarizer was not fitted yet.