前提・実現したいこと
現在自作のカラー画像データセットを作り、そこからchainerを使って学習しようとしています。
画像データセットは以下のように作っています
①ファイル先にある画像を読み込む(150×150のカラー画像)
②カラー画像の出力形式をRGBにする
③RGBにそれぞれ255で割る
④配列にRGBの順番に入れる(この時の画像のサイズは(3,150,150))
⑤出来上がったカラー画像を配列に入れる
⑥それをすべてのファイル作る(12個(テスト6 トレーニング6))
そこから生成した12個の配列にラベルを入れてchainerに合わせてタップル関数でつなげます。
①(3,150,150)に変更したdatas0~11をテスト用とトレーニング用に分ける
②datas0~5のデータからそれぞれ2000枚に設定してtrain_dataに順番に入れる[datas0[0],datas1[0],datas2[0],datas3[0],datas4[0],datas5[0],datas0[1]....]
④リストからnumpyに変更する←ここでエラーが出てしまいます
⑤label1の配列にtrain_dataで合わせて[0,1,2,3,4,5,0....]に設定する
⑥new_label1でlabel1のint32に設定する。
⑦タップル関数を使う。
⑧datas6~11のデータからそれぞれ400枚に設定してtest_dataに順番に入れる[datas6[0],datas7[0],datas8[0],datas9[0],datas10[0],datas11[0],datas6[1]....]
⑨label2の配列にtest_dataで合わせて[0,1,2,3,4,5,0....]に設定する
⑩new_label2でlabel2のint32に設定する。
⑪タップル関数を使う。
発生している問題・エラーメッセージ
C:\pleiades\python\3\lib\site-packages\numpy\core\_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray return array(a, dtype, copy=False, order=order) Exception in Tkinter callback Traceback (most recent call last): File "C:\pleiades\python\3\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "C:\pleiades\workspace\LogicCulc\LogicCulc_Chainer_v2\NetworkCreator\NetworkCreator.py", line 485, in selected_ds newtrain_data = np.asarray(train_data) File "C:\pleiades\python\3\lib\site-packages\numpy\core\_asarray.py", line 83, in asarray return array(a, dtype, copy=False, order=order) ValueError: could not broadcast input array from shape (3,150,150) into shape (3)
該当のソースコード
import os import numpy as np import glob import cv2 import chainer import pickle from chainer import cuda, Function, gradient_check, report, training, utils, Variable from chainer import datasets, iterators, optimizers, serializers from chainer.datasets import tuple_dataset, TupleDataset image_dir0 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\buildings" image_dir1 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\forest" image_dir2 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\glacier" image_dir3 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\mountain" image_dir4 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\sea" image_dir5 = r"C:\Users\user\Desktop\archive\seg_train\seg_train\street" image_dir6 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\buildings" image_dir7 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\forest" image_dir8 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\glacier" image_dir9 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\mountain" image_dir10 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\sea" image_dir11 = r"C:\Users\user\Desktop\archive\seg_test\seg_test\street" search_pattern = '*.jpg' datas0 = [] datas1 = [] datas2 = [] datas3 = [] datas4 = [] datas5 = [] datas6 = [] datas7 = [] datas8 = [] datas9 = [] datas10= [] datas11= [] #(画像データセットの作り方(これを12個作ります。)) for image_path in glob.glob(os.path.join(image_dir0,search_pattern)): # (height,width,channels) data = cv2.imread(image_path) data1 = cv2.cvtColor(data, cv2.COLOR_BGR2RGB) r,g,b = cv2.split(data1) rImgData = np.asarray(np.float32(r)/255.0) gImgData = np.asarray(np.float32(g)/255.0) bImgData = np.asarray(np.float32(b)/255.0) imgData0 = np.asarray([rImgData, gImgData, bImgData]) datas0.append(imgData0) #(12個の配列に教師データを入れてタップル関数でつなげます。) train_data =[] label1 = [] new_label1 = [] test_data =[] label2 = [] new_label2 = [] for i in range(2000):#あらかじめ2000枚と設定してそれぞれの(3,150,150)のデータを順番に入れる train_data.append(datas0[i]) train_data.append(datas1[i]) train_data.append(datas2[i]) train_data.append(datas3[i]) train_data.append(datas4[i]) train_data.append(datas5[i]) newtrain_data = np.array(train_data) for j in range(2000):#ラベルを順番に入れていく label1.append(0) label1.append(1) label1.append(2) label1.append(3) label1.append(4) label1.append(5) new_label1 = np.array(label1, dtype=np.int32)#int32型に直す self.train = tuple_dataset.TupleDataset(newtrain_data, new_label1) for k in range(400):#あらかじめ400枚と設定してそれぞれの(3,150,150)のデータを順番に入れる test_data.append(datas6[k]) test_data.append(datas7[k]) test_data.append(datas8[k]) test_data.append(datas9[k]) test_data.append(datas10[k]) test_data.append(datas11[k]) newtest_data = np.array(test_data) for l in range(400): label2.append(0) label2.append(1) label2.append(2) label2.append(3) label2.append(4) label2.append(5) new_label2 = np.array(label2, dtype=np.int32)#int32型に直す self.test = tuple_dataset.TupleDataset(newtest_data, new_label2)
試したこと
newtrain_dataの形状をnp.zeros((3,150,150))とnp.emptyで三次元の配列にそろえてみましたがうまくいきませんでした
補足情報(FW/ツールのバージョンなど)
chainerのデータセットの作り方は以下のサイトを参考にしました
https://qiita.com/tommyfms2/items/c3fa0cb258c17468cb30
回答1件
あなたの回答
tips
プレビュー