web-dev-qa-db-fra.com

TypeError: seuls les tableaux scalaires entiers peuvent être convertis en index scalaire.

J'essaie un code de démonstration simple de tensorflow de lien github .
J'utilise actuellement python version 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.

J'ai rencontré cette erreur lorsque j'ai essayé board.py en ligne de commande. J'ai installé toutes les dépendances nécessaires à son exécution.

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
19
Suraksha Ajith

vous pouvez modifier la fonction:

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

nouvelle version:

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

ajouter [0] à la fin.

Cela semble être un problème avec la dernière version de Numpy. Une modification récente rendait erronée le fait de traiter un tableau à un seul élément comme un scalaire aux fins de l'indexation.

35
Von

Le lien de code que vous avez fourni utilise un fichier séparé nommé input_data.py pour télécharger des données à partir de MNIST en utilisant les deux lignes suivantes dans board.py

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

Comme les données MNIST sont si souvent utilisées à des fins de démonstration, Tensorflow offre un moyen de les télécharger automatiquement.

Remplacez les deux lignes ci-dessus dans board.py avec les deux lignes suivantes et l'erreur disparaîtra.

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

Ce fichier est probablement corrompu:

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

Analysons l'erreur que vous avez signalée.

Ceci indique que le code fonctionne actuellement avec le fichier en question:

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

Traceback indique qu'une trace de pile suit:

Traceback (most recent call last):

Ceci indique que vous avez lu vos ensembles de données à partir 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)

Ceci indique que le code extrait des images:

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

Ceci indique que le code doit lire rows * cols * num_images octets:

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

C'est la ligne qui fait erreur:

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

Je suppose que size est la valeur problématique et a été calculé sur la ligne précédente du stacktrace.

Je peux voir au moins deux façons de procéder.

  1. Supprimez le fichier incriminé et voyez si le problème disparaît. Cela vous permettrait de vérifier que le fichier est corrompu.

  2. Utilisez un débogueur pour entrer dans le code, puis inspectez les valeurs utilisées pour calculer la variable incriminée. Utilisez les connaissances acquises pour procéder à partir de là.

2
Stephen Rauch