调用test_model时,它给出了以下错误:
TypeError: slice indices must be integers or None or have an __index__ method
但是我用一个整数(特定批次)调用test_model。 Inputtest是浮点列表的列表,label是一个int的向量。我不确定问题是什么。
def optimize(learning_rate = 0.1,n_epochs = 1000, batch_size = 600):
n_train_batches = len(inputt)//batch_size
n_val_batches = len(inputsdev)//batch_size
n_test_batches = len(inputstest)//batch_size
rng = numpy.random.RandomState(1234)
index = T.lscalar('index')
x = T.ivector('x')
y = T.ivector('y')
classifier = Regression(x, n_in = 150, n_out = 24)
cost = classifier.negative_log_likelihood(labelt)
test_model = theano.function(inputs = [index], outputs = classifier.errors(y),givens = { x: inputstest[index * batch_size:(index + 1) * batch_size], y : labeltes[index * batch_size:(index + 1) * batch_size]})
答案 0 :(得分:0)
有时你会得到一个看起来像整数的值。我做了两个实验来帮助你理解。
1
list1 = [2,3]
index = '1'
print(list1[index])
输出:TypeError:列表索引必须是整数或切片,而不是str
2
list1 = [2,3]
index = '1'
print(list1[int(index)])
输出:3
因此,您必须确保输入到列表或其他数据结构的索引应为整数。但它并不总是整数。如果使用字典,则应输入字符串。这取决于您使用的数据结构。
希望它有所帮助。 :)
答案 1 :(得分:0)
Theano documentation提到这样做
index = T.lscalar('index')
会将索引返回到[mini]批次
我认为更换:
x --> inputstest[index * batch_size:(index + 1) * batch_size]
y --> labeltest[index * batch_size:(index + 1) * batch_size]
图表中的无效,因为您可能需要使用批量启动和批量停止,并且您没有将学习率传递给您的功能。