1

my_classifier.y_binary の値にアクセスしたいです。私の目標は、my_classifier.error を計算することです。

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
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 に答える