前提・実現したいこと
https://qiita.com/kojikoji_ksnv/items/12dfe9075cb1dd3afe59
上記の記事を参考にして画像認識を行おうとしたところ、.npyでデータを保存することができませんでした。RGBでデータを読み込んだことが原因のようですが、解決策を教えていただきたいです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-6-0e9f24f0d2a3> in <module> 53 54 #データを保存する ---> 55 np.save("C:/data/0729_data.npy", xy) <__array_function__ internals> in save(*args, **kwargs) ~\anaconda3\lib\site-packages\numpy\lib\npyio.py in save(file, arr, allow_pickle, fix_imports) 549 550 try: --> 551 arr = np.asanyarray(arr) 552 format.write_array(fid, arr, allow_pickle=allow_pickle, 553 pickle_kwargs=pickle_kwargs) ~\anaconda3\lib\site-packages\numpy\core\_asarray.py in asanyarray(a, dtype, order) 136 137 """ --> 138 return array(a, dtype, copy=False, order=order, subok=True) 139 140 ValueError: could not broadcast input array from shape (1500,250,250,3) into shape (1500)
該当のソースコード
python
1from PIL import Image 2import os, glob 3import numpy as np 4import random, math 5train_dir = "C:/dataset_train" 6test_dir = "C:/dataset_test" 7 8# 種類 9categories = ["カテゴリ1","カテゴリ2", "カテゴリ3"] 10 11image_size =250 12 13 14# 画像データ用配列 15X = [] 16# ラベルデータ用配列 17Y = [] 18 19#画像データごとにadd_sample()を呼び出し、X,Yの配列を返す関数 20def make_sample(files): 21 global X, Y 22 X = [] 23 Y = [] 24 for cat, fname in files: 25 add_sample(cat, fname) 26 return np.array(X), np.array(Y) 27 28def add_sample(cat, fname): 29 img = Image.open(fname) 30 img = img.convert("RGB") 31 img = img.resize((image_size, image_size ) , 3 ) 32 data = np.asarray(img) 33 X.append(data) 34 Y.append(cat) 35 36#学習用画像 37trainfiles = [] 38#テスト用画像 39testfiles = [] 40 41for idx, cat in enumerate(categories): 42 image_dir = train_dir + "/" + cat 43 files = glob.glob(image_dir + "/*.jpg") 44 for f in files: 45 trainfiles.append((idx, f)) 46 47for idx, cat in enumerate(categories): 48 image_dir = test_dir + "/" + cat 49 files = glob.glob(image_dir + "/*.jpg") 50 for f in files: 51 testfiles.append((idx, f)) 52 53X_train, y_train = make_sample(trainfiles) 54X_test, y_test = make_sample(testfiles) 55xy = (X_train, X_test, y_train, y_test) 56 57 58#データを保存する 59np.save("C:/data/0729_data.npy", xy)
試したこと
img = img.resize((image_size, image_size )) を
img = img.resize((image_size, image_size ),3) に変更して実行
補足情報(FW/ツールのバージョンなど)
python3
anaconda
回答1件
あなたの回答
tips
プレビュー