2015-02-09 66 views
0

我想訪問my_classifier.y_binary的值。我的目標是計算my_classifier.error。如何訪問類內的theano符號變量的值?

我知道如何使用eval獲取my_classifier.y_hat的值,但我不知道如何在輸入是自參數時使用它。

感謝

# imports 
 
import theano 
 
import theano.tensor as T 
 
import numpy as np 
 
import matplotlib.pyplot as plt 
 
import os, subprocess 
 

 
class Perceptron(object): 
 
    """Perceptron for the last layer 
 
    """ 
 
    def __init__(self, input, targets, n_features): 
 
     """ Initialize parameters for Perceptron 
 
     
 
     :type input:theano.tensor.TensorType 
 
     :param input:symbolic variable that describes the 
 
        input of the architecture 
 
         
 
     :type targets:theano.tensor.TensorType 
 
     :param targets:symbolic variable that describes the 
 
         targets of the architecture 
 
         
 
     :type n_features:int 
 
     :param n_features:number of features 
 
          (including "1" for bias term) 
 
          
 
     """ 
 
     
 
     # initilialize with 0 the weights W as a matrix of shape 
 
     # n_features x n_targets 
 
     
 
     self.w = theano.shared(value=np.zeros((n_features), dtype=theano.config.floatX), 
 
           name='w', 
 
           borrow=True 
 
           ) 
 
           
 
     self.y_hat = T.nnet.sigmoid(T.dot(input,self.w)) 
 
     self.y_binary = self.y_hat>0.5 
 
     self.binary_crossentropy = T.mean(T.nnet.binary_crossentropy(self.y_hat,targets)) 
 
     self.error= T.mean(T.neq(self.y_binary, targets))  
 

 
# create training data 
 
features = np.array([[1., 0., 0],[1., 0., 1.], [1.,1.,0.], [1., 1., 1.]]) 
 
targets = np.array([0., 1., 1., 1]) 
 
n_targets = features.shape[0] 
 
n_features = features.shape[1] 
 
       
 
# Symbolic variable initialization 
 
X = T.matrix("X") 
 
y = T.vector("y") 
 

 
my_classifier = Perceptron(input=X, targets=y,n_features=n_features) 
 
cost = my_classifier.binary_crossentropy 
 
error = my_classifier.error 
 
gradient = T.grad(cost=cost, wrt=my_classifier.w) 
 
updates = [[my_classifier.w, my_classifier.w-gradient*0.05]] 
 
# compiling to a theano function 
 
train = theano.function(inputs = [X,y], outputs=cost, updates=updates, allow_input_downcast=True) 
 

 
# iterate through data 
 
# Iterate through data 
 
l = np.linspace(-1.1,1.1) 
 
cost_list = [] 
 
for idx in range(500): 
 
    cost = train(features, targets) 
 
    if my_classifier.error==0: 
 
     break 
 
    
 

 

 
     
 
         
 
     
 
                        
 
                                           
 
                                                              
 
                                                                                                  

回答

0

如果你想在你需要編寫一個函數來獲取它的圖形中的節點的值。我認爲像

y_binary = theano.function(inputs = [X,], outputs=my_classifier.y_binary, allow_input_downcast=True) 

應該給你的功能y_binary()和調用y_binary(features)應該轉發傳播網絡,併產生二值化輸出。

0

編譯的函數是一個更好的選擇,但是當你設置的東西了一個快速和骯髒的方法是這樣的:

這樣的:

while (epoch < n_epochs):  
     epoch = epoch + 1  
     for minibatch_index in range(n_train_batches): 
      minibatch_avg_cost = train_model(minibatch_index) 
      iter = (epoch - 1) * n_train_batches + minibatch_index 
      print("**********************************") 
      print(classifier.hiddenLayer.W.get_value()) 

完整的代碼在這裏:https://github.com/timestocome/MiscDeepLearning/blob/master/MLP_iris2.py

我想在你的例子中你會使用'my_classifier.w.get_value()'