github link からのテンソルフローの簡単なデモコードを試しています。
現在pythonバージョン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.
コマンドラインでboard.pyを試したときに、このエラーに遭遇しました。これを実行するために必要なすべての依存関係をインストールしました。
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
関数を変更できます:
def _read32(bytestream):
dt = numpy.dtype(numpy.uint32).newbyteorder('>')
return numpy.frombuffer(bytestream.read(4), dtype=dt)
新しいバージョン:
def _read32(bytestream):
dt = numpy.dtype(numpy.uint32).newbyteorder('>')
return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]
最後に[0]
を追加します。
これは、Numpyの最新バージョンの問題のようです。最近の変更により、単一要素配列をインデックス作成の目的でスカラーとして扱うとエラーになりました。
指定したコードリンクでは、input_data.py
という別のファイルを使用して、board.py
の次の2行を使用してMNISTからデータをダウンロードします
import input_data
mnist = input_data.read_data_sets("/tmp/data/",one_hot=True)
MNISTデータはデモ目的で非常に頻繁に使用されるため、Tensorflowは自動的にダウンロードする方法を提供します。
board.py
の上記の2行を次の2行に置き換えると、エラーが消えます。
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
このファイルは破損している可能性があります。
Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz
投稿したエラーを分析しましょう。
これは、問題のファイルでコードが現在機能していることを示しています。
Extracting Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz
Traceback
は、スタックトレースが続くことを示します。
Traceback (most recent call last):
これは、'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)
これは、コードが画像を抽出していることを示しています。
File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 150, in read_data_sets
train_images = extract_images(local_file)
これは、コードがrows * cols * num_images
バイトを読み取ることが期待されることを示します。
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
size
は問題のある値であり、スタックトレースの前の行で計算されたものだと思います。
少なくとも2つの方法があります。
問題のあるファイルを削除して、問題が解決するかどうかを確認してください。これにより、ファイルが何らかの形で破損していることを確認できます。
デバッガーを使用してコードにステップインし、問題のある変数の計算に使用される値を調べます。そこから先に進むには、得た知識を使用してください。