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

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

詳細はこちら
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

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

機械学習

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

Q&A

解決済

1回答

2067閲覧

リストからnumpy配列に変換できない

mainichiramen

総合スコア2

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python 3.x

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

機械学習

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

0グッド

0クリップ

投稿2020/11/28 12:45

編集2020/11/29 13:03

前提・実現したいこと

現在自作のカラー画像データセットを作り、そこから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

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

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

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

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

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

jbpb0

2020/12/07 08:31 編集

ちょこっと修正して動かしましたけど、エラーは出ませんでした 挙げられているコードのどこでエラーが出ているのでしょうか? 下記を修正しました ・フォルダ数を三つに (データを格納する変数はフォルダ三つに関する必要なものだけ残して、不要なものは削除) ・各フォルダ内の画像は9枚ずつ (ループ条件の2000も9に変える) ・画像ファイルを読み込んだ直後に150x150にリサイズ (使った画像ファイルのサイズがまちまちなので) ・コードの最後の方のtestデータのコードを消してtrainデータのだけにする (testもtrainと実質の内容は同じなので) ・for image_path in... のループは三つのフォルダそれぞれで行う (結果を格納する変数名も当然変える) ・for image_path in... のループ以降の不要なインデントを削除 ・self.train を train に変える
guest

回答1

0

自己解決

手法を変えて.npz形式で保存したらうまくいきました

投稿2021/05/13 09:26

mainichiramen

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問