質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5262閲覧

MNISTデータをreshapeできない

gus_ghost

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2017/11/29 05:59

編集2017/11/29 06:31

###前提・実現したいこと
tensorflowでDCGANを使って画像生成するサンプルを自分のPCで動かそうとしています
win10,anaconda(python3.5)で作業しています

###発生している問題・エラーメッセージ

読み込まれたMNISTデータを整形しようとすると形が合わないと怒られます

ValueError: cannot reshape array of size 9912406 into shape (60000,28,28,1)

###該当のソースコード
ここを参考にして
https://qiita.com/shu223/items/b6d8dc1fccb7c0f68b6b

下のコードをクローンしてそのままつかってます
https://github.com/carpedm20/DCGAN-tensorflow

download.pyでMNISTをダウンロードしたのち
main.pyで画像生成するのですがそこでエラーが出ます

python

1・・・ 2 def load_mnist(self): 3 data_dir = os.path.join("./data", self.dataset_name) 4 5 fd = open(os.path.join(data_dir, 'train-images-idx3-ubyte')) 6 loaded = np.fromfile(file=fd, dtype=np.uint8) 7 trX = loaded[16:].reshape((60000, 28, 28, 1)).astype(np.float) 8・・・

28*28pxの画像が60000例なら47040000個要素があるのだろうと思ったのですがどう見ても数が合いません

ValueError: cannot reshape array of size 9912406 into shape (60000,28,28,1)

#追記(2017/11/29)
エラーを起こしたtrain-images-idx3-ubyte.gzのバイト数を調べたところ
9,912,422 バイトでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/11/29 06:22

「./data/train-images-idx3-ubyte」の実ファイルサイズを確認し追記ください(正しく47,040,016 バイトか?)
gus_ghost

2017/11/29 06:25

エクスプローラで確認したところ9,912,422バイトでした。全く足りてないですね…
can110

2017/11/29 06:27

あ、9,912,422バイトは解凍前のサイズです→http://yann.lecun.com/exdb/mnist/
gus_ghost

2017/11/29 06:37

ということは解凍前のファイルを読み込ませようとしてたわけですね…謎が解けました
guest

回答2

0

ベストアンサー

train-images-idx3-ubyte.gzのサイズが9,912,422バイトなので、解凍前のファイルを読み込んでいると思われます。
解凍してtrain-images-idx3-ubyteファイルを置き換えると正常動作すると思います。

参考:MNIST 手書き数字データを画像ファイルに変換する

また、mkgreiさんも指摘されていますがfd = open(~, 'rb')rb=バイナリモードで開かないと正常に読み込めないかもしれません(未検証)。

PermissionErrorについて追記

おそらくファイルではなくディレクトリを開こうとしています。
次のようなディレクトリ構成になっていないでしょうか?

plain

1./data + 2 | 3 + mnist + 4 | 5 + train-images-idx3-ubyte + ←ディレクトリ! 6 | 7 + train-images-idx3-ubyte 解凍されたファイル

検証コード

Python

1import os 2data_dir = os.path.join("./data", 'mnist') 3file_path = os.path.join(data_dir, 'train-images-idx3-ubyte') 4print(file_path) 5fd = open(file_path) 6fd.close()

実行結果

plain

1./data\mnist\train-images-idx3-ubyte 2Traceback (most recent call last): 3 File "~\temp.py", line 7, in <module> 4 fd = open(file_path) 5PermissionError: [Errno 13] Permission denied: './data\mnist\train-images-idx3-ubyte'

投稿2017/11/29 06:30

編集2017/11/29 08:44
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2017/11/29 06:35

たしかにそうですね。 download.pyで解凍しているはずなのに不思議な挙動です。
can110

2017/11/29 06:40

download_mnist()ソース見ましたが「gzip -d ~」してますね。 windows環境は普通はgzipないので解凍失敗していたんじゃないかと。
gus_ghost

2017/11/29 06:42

はい、.gzが圧縮ファイルだとは気づかず一生懸命読み込ませようとしてました。しょぼいところで躓いててちょっと恥ずかしいです
mkgrei

2017/11/29 06:51

なぜかwindows環境の行を読んだはずなのに、記憶から消えていました…
can110

2017/11/29 06:56

まあ、download.pyのソースではわざわざ外部ツールを使っていますが pythonのgzipモジュール使うほうが移植性に優れ確実ですね。
gus_ghost

2017/11/29 07:22 編集

.gzファイルを手で解凍してもう一度やってみたら今度はpermission errorだと言われてしまいました。 管理者アカウントで実行してるはずなのですが…
mkgrei

2017/11/29 07:37

おっしゃる通りですね。 不要な表示はいいのですが、せめてエラーは出力してほしいですね。 しかもdownload.pyではgzipをインポートするところまでやっているのに、なぜか使用していないですね。 ついでにですが、機械学習に典型的なデータセットをダウンロードする際に多くのエラーが見受けられています。 https://qiita.com/ToshikiShimizu/items/6bfacef12dafd63b1080 http://tekenuko.hatenablog.com/entry/2017/07/05/212205 CSVファイルなどが王道ですが、慣れないうちはダウンロードや読み込みに失敗しない方法のほうがおすすめです。
can110

2017/11/29 07:37

誰かが解凍したファイルを開いていませんか?よくわからない場合はOS再起動するのが確実です。
mkgrei

2017/11/29 07:40

そう言えばですが、 fd = open(os.path.join(data_dir, 'train-images-idx3-ubyte')) と.gzがないファイルを開こうとしているのに、拡張子を勝手に補完するような機能があるのですか。
can110

2017/11/29 08:03

多分openで拡張子補完などはされないと思います。勝手にされても困りますし。
gus_ghost

2017/11/29 14:38

各訓練データやらをmnistディレクトリに移動して不要なディレクトリを削除、データファイルの名前がおかしくなってたのでリネームしてエクスプローラを全部閉じたところちゃんと実行できました! 本当にありがとうございます
guest

0

何個データあるかわからない時はreshape(-1,28,28,1)でなんとかなりますが、今回はそもそも割り切れてませんね。
なぜでしょう。

openするときにバイナリで開いてもいけませんか?
open(filename, 'rb')

投稿2017/11/29 06:17

編集2017/11/29 06:31
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問