我想访问 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