【问题标题】:TypeError: slice indices must be integersTypeError:切片索引必须是整数
【发布时间】:2016-03-02 14:02:02
【问题描述】:

调用 test_model 时出现以下错误:

TypeError: slice indices must be integers or None or have an __index__ method

但我使用整数(特定批次)调用 test_model。 Inputtest 是浮点数列表,labeltes 是整数向量。我不确定是什么问题。

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]})

【问题讨论】:

  • 你能发布完整的堆栈跟踪
  • 你能把你的问题解释清楚吗?
  • 什么是T.lscalar('index')?奇怪的是,它不是int-like,并且将它乘以 int 不会产生 int-like。
  • 是labeltes还是labeltest?确保不是拼写错误。
  • 如果没有更多细节,可能无法看到发生了什么。我的猜测是inputstest 和/或labeltes 不是共享变量,但它们必须是。如果它们是普通的 numpy 数组,则不能使用 Theano 符号索引对 numpy 数组进行切片,即符号表达式 index * batch_size:(index + 1) * batch_size 的结果。

标签: python theano


【解决方案1】:

有时你会得到一个看起来像整数的值。我做了两个实验来帮助你理解。

1.

list1 = [2,3]

index = '1'

print(list1[index])

输出:TypeError:列表索引必须是整数或切片,而不是 str

2.

list1 = [2,3]

index = '1'

print(list1[int(index)])

输出:3

所以你必须确保你输入到列表或其他数据结构的索引应该是整数。但它并不总是整数。如果你使用字典,你应该输入字符串。这取决于您使用的数据结构。

希望对您有所帮助。 :)

【讨论】:

  • 我不认为这是这里的问题 - 这个问题可以通过您的示例中的 list(map(int, list1)) 解决。我相信参数给定的问题。
  • 抱歉造成误会。我虽然他们的情况相似。
【解决方案2】:

Theano documentation 提到这样做

index = T.lscalar('index')  

将索引返回到 [mini]batch

我认为替换:

x --> inputstest[index * batch_size:(index + 1) * batch_size]
y --> labeltest[index * batch_size:(index + 1) * batch_size]

在您的图表中不起作用,因为您可能需要使用批处理启动和批处理停止,并且您没有将学习率传递给您的函数。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2019-07-04
    • 2015-12-09
    • 2019-02-05
    • 2021-11-28
    • 2020-09-23
    • 2017-03-11
    • 2020-09-04
    相关资源
    最近更新 更多