我想访问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
答案 0 :(得分:0)
如果你想要图中节点的值,你需要编译一个函数来获取它。我觉得像
y_binary = theano.function(inputs = [X,], outputs=my_classifier.y_binary, allow_input_downcast=True)
应该为您提供函数y_binary()
,并且调用y_binary(features)
应该转发传播网络并产生二值化输出。
答案 1 :(得分: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
我认为在您的示例中,您使用&#39; my_classifier.w.get_value()&#39;