🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

3705閲覧

犬と猫の画像分類問題で、画像をJupyternotebookに表示する方法

nobita

総合スコア66

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2019/11/03 06:48

jupyter notebook を使って機械学習の基礎を学習しています。

言語は Python3

import imageio import numpy as np # 写真は全て 75ピクセル × 75ピクセル のRGBカラー画像 PHOTO_SIZE = 75 * 75 * 3 # 空の配列(計測データ X と教師データ y)を用意する X = np.empty((0, PHOTO_SIZE), np.uint8) y = np.empty(0, np.uint8) # 犬と猫の画像を配列形式で読み込んでXに格納(axis = 0で二次元配列の縦(行)に要素を追加する) # y には 犬 なら 0, 猫 なら 1 で整数値のデータを追加 for i in range(1, 201): p1 = imageio.imread(f"dc_photos/dogs/dog-{i:03d}.jpg").reshape(1, PHOTO_SIZE) X = np.append(X, p1, axis = 0) y = np.append(y, np.array([0], dtype = np.uint8)) p2 = imageio.imread(f"dc_photos/cats/cat-{i:03d}.jpg").reshape(1, PHOTO_SIZE) X = np.append(X, p2, axis = 0) y = np.append(y, np.array([1], dtype = np.uint8))

として画像を配列に格納したあとに、

この画像を最初の10個くらいを確認するため画像を表示をしたいですが、
うまくコードがかけません。 アドバイスをいただけますか?

print(X.shape) print(y.shape) (400, 16875) (400,)

今現状は、

import imageio import numpy as np import matplotlib.pyplot as plt fig = plt.figure() for i , x in enumerate(X[:10],0): sp = fig.add_subplot(2,5,(i + 1)) sp.imshow(x.reshape(8,8),cmap="gray")

としてみたのですが、 reshapeでエラーがでている ようです。
エラー文

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

画像を表示できれば良いのでしたら、.reshape(8,8) を除いて、sp.imshow(x, cmap="gray") とすれば良いと思います。

reshape は要素数が同じでないといけないのですが、(400, 16875) から (8, 8) への変換は要素数が異なるために、ValueError が出ています。

投稿2019/12/04 15:03

kabayan55

総合スコア389

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

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

nobita

2019/12/06 13:23

``` --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-27-78aef47fde00> in <module> 7 for i , x in enumerate(X[:10],0): 8 sp = fig.add_subplot(2,5,(i + 1)) ----> 9 sp.imshow(x,cmap="gray") ~/opt/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs) 1599 def inner(ax, *args, data=None, **kwargs): 1600 if data is None: -> 1601 return func(ax, *map(sanitize_sequence, args), **kwargs) 1602 1603 bound = new_sig.bind(ax, *args, **kwargs) ~/opt/anaconda3/lib/python3.7/site-packages/matplotlib/cbook/deprecation.py in wrapper(*args, **kwargs) 367 f"%(removal)s. If any parameter follows {name!r}, they " 368 f"should be pass as keyword, not positionally.") --> 369 return func(*args, **kwargs) 370 371 return wrapper ~/opt/anaconda3/lib/python3.7/site-packages/matplotlib/cbook/deprecation.py in wrapper(*args, **kwargs) 367 f"%(removal)s. If any parameter follows {name!r}, they " 368 f"should be pass as keyword, not positionally.") --> 369 return func(*args, **kwargs) 370 371 return wrapper ~/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs) 5669 resample=resample, **kwargs) 5670 -> 5671 im.set_data(X) 5672 im.set_alpha(alpha) 5673 if im.get_clip_path() is None: ~/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py in set_data(self, A) 688 or self._A.ndim == 3 and self._A.shape[-1] in [3, 4]): 689 raise TypeError("Invalid shape {} for image data" --> 690 .format(self._A.shape)) 691 692 if self._A.ndim == 3: TypeError: Invalid shape (16875,) for image data ```
kabayan55

2019/12/11 07:29 編集

・表示できそうなところまでいった x が X になっています。単純に横長に表示されているだけだと思います。 ・TypeError: Invalid shape (16875,) for image data の問題 (16875,) を表示するのは16875×0の画像を出力するのと同義なので、出力できません。少し見当違いな回答をしてしまい、すみませんでした。X と x を思い違えておりました。 ・なぜかうまくいった件 質問に貼っていただいたエラー文によると、変換前の x の要素数は 16875 です。ここで(75, 75, 3)にreshapeするように指定していらっしゃいますが、75×75×3=16,875なので、元の要素数と同じです。要素数が同じ場合にreshapeが使えますので、この場合は動いています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問