TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс

Я пробую простой демонстрационный код тензорного потока из ссылки на github.
В настоящее время я использую версию Python 3.5.2

Z:\downloads\tensorflow_demo-master\tensorflow_demo-master>py Python
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32<br> Type "help", "copyright", "credits" or "license" for more information.

Я столкнулся с этой ошибкой, когда попробовал board.py в командной строке. Я установил все необходимые для этого зависимости.

def _read32(bytestream):
    dt = numpy.dtype(numpy.uint32).newbyteorder('>')
    return numpy.frombuffer(bytestream.read(4), dtype=dt)

def extract_images(filename):
    """Extract the images into a 4D uint8 numpy array [index, y, x, depth]."""
    print('Extracting', filename)
    with gzip.open(filename) as bytestream:
        magic = _read32(bytestream)
        if magic != 2051:
            raise ValueError(
                'Invalid magic number %d in MNIST image file: %s' %
                (magic, filename))
        num_images = _read32(bytestream)
        rows = _read32(bytestream)
        cols = _read32(bytestream)
        buf = bytestream.read(rows * cols * num_images)
        data = numpy.frombuffer(buf, dtype=numpy.uint8)
        data = data.reshape(num_images, rows, cols, 1)
    return data

Z:\downloads\tensorflow_demo-master\tensorflow_demo-master>py board.py
Extracting  Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz
Traceback (most recent call last):  
File "board.py", line 3, in <module>
    mnist = input_data.read_data_sets(r'Z:/downloads/MNIST dataset', one_hot=True)  
File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file) 
File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 40, in extract_images
    buf = bytestream.read(rows * cols * num_images) 
File "C:\Users\surak\AppData\Local\Programs\Python\Python35\lib\gzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index

person Suraksha Ajith    schedule 09.02.2017    source источник


Ответы (3)


вы можете изменить функцию:

def _read32(bytestream):
    dt = numpy.dtype(numpy.uint32).newbyteorder('>')
    return numpy.frombuffer(bytestream.read(4), dtype=dt)

новая версия:

def _read32(bytestream):
    dt = numpy.dtype(numpy.uint32).newbyteorder('>')
    return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]

в конце добавить [0].

Похоже, это проблема с последней версией Numpy. Недавнее изменение сделало ошибкой обработку одноэлементного массива как скаляра для целей индексации.

person Von    schedule 24.02.2017
comment
python 3.5.2 здесь. добавить [0] не удалось, но from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) удалось - person WY Hsu; 31.08.2018

В предоставленной вами кодовой ссылке используется отдельный файл с именем input_data.py для загрузки данных из MNIST, используя следующие две строки в board.py

import input_data 
mnist = input_data.read_data_sets("/tmp/data/",one_hot=True)

Поскольку данные MNIST так часто используются в демонстрационных целях, Tensorflow предоставляет способ их автоматической загрузки.

Замените две приведенные выше строки в board.py следующими двумя строками, и ошибка исчезнет.

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
person bhaskarc    schedule 24.02.2017
comment
Это сработало для меня, но затем появилась эта ошибка: w_h = tf.histogram_summary (weights, W) AttributeError: модуль 'tensorflow' не имеет атрибута 'histogram_summary' - person DJ Howarth; 07.03.2017
comment
здесь такая же проблема. - person Amir; 08.03.2017
comment
Это потому, что api изменился в последней версии. Теперь сводка гистограммы перенесена в tf.summary.histogram. - person bhaskarc; 08.03.2017
comment
ты прав. Оба tf.histogram_summary в строке 32 необходимо изменить. Однако теперь я застрял на строке 40: AttributeError: 'module' object has no attribute 'scalar_summary' - person Amir; 10.03.2017
comment
@Amir tf.summary.scalar - все аннотации перемещены в модуль резюме - person bhaskarc; 10.03.2017

Вероятно, этот файл поврежден:

Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz

Давайте проанализируем опубликованную вами ошибку.

Это указывает на то, что код в настоящее время работает с рассматриваемым файлом:

Extracting  Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz

Traceback указывает, что следует трассировка стека:

Traceback (most recent call last):

Это означает, что вы читаете свои наборы данных из 'Z:/downloads/MNIST dataset':

File "board.py", line 3, in <module>
    mnist = input_data.read_data_sets(r'Z:/downloads/MNIST dataset', one_hot=True)

Это указывает на то, что код извлекает изображения:

File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file)

Это указывает на то, что код, как ожидается, прочитает rows * cols * num_images байтов:

File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 40, in extract_images
    buf = bytestream.read(rows * cols * num_images)

Это строка с ошибками:

File "C:\Users\surak\AppData\Local\Programs\Python\Python35\lib\gzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index

Я полагаю, что size является проблемным значением и было рассчитано на предыдущей строке трассировки стека.

Я вижу по крайней мере два пути продолжения.

  1. Удалите проблемный файл и посмотрите, исчезнет ли проблема. Это позволит вам убедиться, что файл каким-то образом поврежден.

  2. Используйте отладчик, чтобы войти в код, а затем проверить значения, используемые для вычисления ошибочной переменной. Используйте полученные знания, чтобы исходить из этого.

person Stephen Rauch    schedule 09.02.2017