2017-02-09 12 views
14

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

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

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 

ответ

28

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

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. Недавнее изменение сделало ошибкой рассматривать одноэлементный массив как скаляр для целей индексации.

2

Этот файл, скорее всего, поврежден:

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 

I Ожидание size является проблематичным значением и рассчитывается по предыдущей строке stacktrace.

Я могу видеть как минимум два способа продолжения.

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

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

3

Ссылка код вы предоставили использует отдельный файл с именем 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) 
+1

Это работает для меня, но потом получил эту ошибку: w_h = tf.histogram_summary («вес», W) AttributeError: модуль «tensorflow» не имеет атрибута «histogram_summary» –

+0

, имеющие тот же вопрос здесь. – Amir

+1

Это потому, что api изменился в новейшей версии. Теперь гистограмма была перенесена на tf.summary.histogram. – oat

 Смежные вопросы

  • Нет связанных вопросов^_^