TypeError: solo las matrices escalares enteras se pueden convertir en un índice escalar

Estoy probando un código de demostración simple de tensorflow del enlace github .
Actualmente estoy usando la versión 3.5.2 de Python

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
Type "help", "copyright", "credits" or "license" for more information.

Me encontré con este error cuando intenté board.py en la línea de comandos. He instalado todas las dependencias que se requieren para que esto funcione.

 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  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 

Puedes modificar la función:

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

nueva versión:

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

agregar [0] al final.

Esto parece ser un problema con la última versión de Numpy. Un cambio reciente hizo que fuera un error tratar una matriz de un solo elemento como un escalar a los efectos de la indexación.

El enlace de código que ha proporcionado usa un archivo separado llamado input_data.py para descargar datos de MNIST usando las siguientes dos líneas en board.py

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

Dado que los datos de MNIST se utilizan con tanta frecuencia para fines de demostración, Tensorflow proporciona una forma de descargarlos automáticamente.

Reemplace las dos líneas anteriores en board.py con las siguientes dos líneas y el error desaparecerá.

 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) 

Este archivo es probablemente corrupto:

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

Analicemos el error que publicaste.

Esto indica que el código está trabajando actualmente con el archivo en cuestión:

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

Traceback indica que sigue un seguimiento de stack:

 Traceback (most recent call last): 

Esto indica que has leído tus conjuntos de datos de 'Z:/downloads/MNIST dataset' :

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

Esto indica que el código está extrayendo imágenes:

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

Esto indica que se espera que el código lea las rows * cols * num_images bytes:

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

Esta es la línea que errores:

 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 

Supongo que el size es el valor problemático y se calculó en la línea anterior del seguimiento de stack.

Puedo ver al menos dos formas de proceder.

  1. Elimine el archivo ofensivo y vea si el problema desaparece. Esto le permitiría verificar que el archivo está dañado de alguna manera.

  2. Use un depurador para ingresar en el código y luego inspeccione los valores utilizados para calcular la variable ofensiva. Utiliza los conocimientos adquiridos para proceder de allí.