Estoy probando un código de demostración simple de tensorflow desde el enlace de 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<br> Type "help", "copyright", "credits" or "license" for more information.Me encontré con este error cuando probé 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 <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 indexPuedes 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] agregue [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 efectos de indexación.
El enlace de código que proporcionó utiliza 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 usan con tanta frecuencia con 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)Es probable que este archivo esté dañado:
Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gzAnalicemos 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 pila:
Traceback (most recent call last): Esto indica que lee sus conjuntos de datos de '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)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 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 falla:
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 Espero que el size sea el valor problemático y se calculó en la línea anterior de stacktrace.
Puedo ver al menos dos formas de proceder.
Elimine el archivo ofensivo y vea si el problema desaparece. Esto le permitiría verificar que el archivo está corrupto de alguna manera.
Use un depurador para ingresar al código y luego inspeccione los valores usados para calcular la variable infractora. Utilice el conocimiento adquirido para proceder desde allí.