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

je suis en train d'essayer un code de démonstration simple de tensorflow de github lien.

J'utilise actuellement la version python 3.5.2



Z:downloadstensorflow_demo-mastertensorflow_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 quand j'ai essayé board.py en ligne de commande. J'ai installé toutes les dépendances requises pour une 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:downloadstensorflow_demo-mastertensorflow_demo-master>py board.py
Extracting  Z:/downloads/MNIST datasettrain-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:downloadstensorflow_demo-mastertensorflow_demo-masterinput_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file) 
File "Z:downloadstensorflow_demo-mastertensorflow_demo-masterinput_data.py", line 40, in extract_images
    buf = bytestream.read(rows * cols * num_images) 
File "C:UserssurakAppDataLocalProgramsPythonPython35libgzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index
18
demandé sur firelynx 2017-02-09 08:21:23

3 réponses

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 a fait une erreur en traitant un tableau à un seul élément comme un scalaire aux fins de l'indexation.

34
répondu Von 2017-02-26 20:40:48

le lien de code que vous avez fourni utilise un fichier séparé nommé input_data.py pour télécharger des données du 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 fréquemment utilisées à des fins de démonstration, Tensorflow fournit un moyen de les télécharger automatiquement.

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

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
4
répondu bhaskarc 2017-02-24 01:20:11

Ce fichier est probablement endommagé:

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

analysons l'erreur que vous avez posté.

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 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 à lire 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)

C'est la ligne que des erreurs:

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

j'attends size est la valeur problématique et a été calculée sur la ligne précédente du stacktrace.

je vois au moins deux façons de procéder.

  1. supprimez le fichier fautif et voyez si le problème disparaît. Cela vous permettra de vérifier que le fichier est en quelque sorte corrompu.

  2. utilisez un débogueur pour entrer dans le code et ensuite inspecter les valeurs utilisées pour calculer la variable incriminée. Utilisez les connaissances acquises pour aller de l'avant.

2
répondu Stephen Rauch 2017-02-10 04:16:04