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