1

我想访问 my_classifier.y_binary 的值。我的目标是计算 my_classifier.error。

我知道如何使用 eval 获取 my_classifier.y_hat 的值,但是当输入是 self 参数时我不知道如何使用它。

谢谢

# 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
4

2 回答 2

0

如果你想要图中节点的值,你需要编译一个函数来获取它。我想像

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

应该给你函数y_binary(),调用y_binary(features)应该向前传播网络并产生二值化输出。

于 2015-02-19T16:52:39.107 回答
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()'

于 2016-05-09T21:12:46.273 回答