2017-02-09 2 views
14

J'essaie un simple code de démonstration de tensorflow de github link.
Je suis actuellement en utilisant la version python 3.5.2

TypeError: peut être converti en un indice scalaire que des réseaux entiers scalaires

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. 

je suis tombé sur cette erreur quand j'ai essayé board.py dans la ligne de commande. J'ai installé toutes les dépendances qui sont nécessaires pour que cela fonctionne.

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 

Répondre

28

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

2

Ce fichier est probablement corrompu:

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

Analysons l'erreur que vous avez publié.

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

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

Traceback indique qu'une trace de la pile suivante:

Traceback (most recent call last): 

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

Ce, indique que le code est des images d'extraction:

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

Ceci est la ligne que les 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 

I attendez size est la valeur problématique et a été calculé sur la ligne précédente de la pile.

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

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

  2. utiliser un débogueur à l'étape dans le code, puis inspecter les valeurs utilisées pour calculer la variable de récidive. Utilisez les connaissances acquises pour procéder à partir de là.

3

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 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 est si souvent utilisé à des fins de démonstration, tensorflow fournit un moyen de le télécharger automatiquement.

Remplacer les deux lignes ci-dessus en 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) 
+1

Cela a fonctionné pour moi, mais ensuite eu cette erreur: w_h = tf.histogram_summary ("poids", W) AttributeError: module 'tensorflow' n'a pas d'attribut 'histogram_summary' –

+0

ayant la même question ici. – Amir

+1

C'est parce que l'API a changé dans la version la plus récente. Le résumé de l'histogramme a été déplacé dans tf.summary.histogram. – oat