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

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

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

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

CNN (Convolutional Neural Network)

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

2回答

2040閲覧

chainer利用時に起こったTypeError: 'NoneType' object is not iterableを解決したい

seyu0930

総合スコア20

Chainer

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

CNN (Convolutional Neural Network)

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2021/07/08 10:20

編集2021/07/08 10:26

画像認識プログラミングレシピという本でchainerについて学習しております。(犬と猫を判別するものです)この章ではcupyを使うことになっているのですが、macOSXなのでcupyをinstallすることができず代わりにCPUでnumpyなどを使って実行したいです。

しかし最後のtrainer.run()の部分でエラーが出てしまいました。
変更してみた箇所などコード内に記述しておりますので参照いただければと思います。(解決できませんでしたが)

python

1import chainer 2import numpy as np 3from PIL import Image 4import os 5from chainer.datasets import LabeledImageDataset 6from chainer.datasets import TransformDataset 7from chainer import datasets 8import chainer 9import chainer.functions as F 10import chainer.links as L 11from chainer import training, serializers, Chain, optimizers, iterators 12from chainer.training import extensions, Trainer 13 14 15 16#学習データと検証データを分ける 17cats_images_train_path = "/Users/haru/dogscats/train/cats" 18dogs_images_train_path = "/Users/haru/dogscats/train/dogs" 19cats_images_valid_path = "/Users/haru/dogscats/valid/cats" 20dogs_images_valid_path = "/Users/haru/dogscats/valid/dogs" 21 22image_and_teacher_label_list = [] 23 24 25#画像と教師ラベルを紐付ける0:猫,1:犬 26def get_image_teacher_label_list(dir, label): 27 filepath_list = [] 28 #引数dir内の画像ファイルを取得 29 files = os.listdir(dir) 30 #ひとつずつ取り出してディレクトリ名+画像ファイル名,ラベル(パス,ラベル)でfilepath_listに追加 31 for file in files: 32 filepath_list.append((dir + file, label)) 33 return filepath_list 34 35 36#学習データと検証データをリストにする 37 38#学習データ猫の画像フォルダ。ラベルは0:猫 39image_and_teacher_label_list.extend(get_image_teacher_label_list(cats_images_train_path, 0)) 40 41#学習データ犬の画像フォルダ。ラベルは0:犬 42image_and_teacher_label_list.extend(get_image_teacher_label_list(dogs_images_train_path, 1)) 43#検証データ猫の画像フォルダ。ラベルは0:猫 44image_and_teacher_label_list.extend(get_image_teacher_label_list(cats_images_valid_path, 0)) 45 46#検証データ犬の画像フォルダ。ラベルは1:犬 47image_and_teacher_label_list.extend(get_image_teacher_label_list(dogs_images_valid_path, 1)) 48 49 50#画像データをchainerのconvoluntion2Dに使えるように整備する 51 52#配列の順序を入れ替える関数 53def data_reshape(width_height_channel_image): 54 #ndarryの生成 55 image_array = np.array(width_height_channel_image) 56 #配列の順序を(0,1,2)から(2,0,1)の順にする(499, 495, 3)が(3, 499, 495)になる 57 return image_array.transpose(2, 0, 1) 58 59 60#畳み込みの準備をする関数 61 62def adapt_data_to_convolution2d_format(input_image): 63 image, label = input_image 64 65 #imageのデータを8ビットの符号なしの整数に変換する(dtypeの変換) 66 image = image.astype(np.unit8) 67 #imageを文字列から画像ファイルに変換 68 image = Image.fromarray(image.transpose(1,2,0)) 69 #画像サイズを変更 70 result_image = image.resize((INPUT_WIDTH, INPUT_HEIGHT), Image.LANCZOS) 71 #data_reshape関数でデータ構造を再変換 72 image = data_reshape(result_image) 73 #0~255の整数を取るデータを0〜1の間の値に変換する(0~1のfloat32型で定義しておかないとChainerがエラーになる) 74 image = image.astype(np.float32) / 255 75 76 return image, label 77 78#データセットを作成する 79dogscats_dataset = LabeledImageDataset(image_and_teacher_label_list) 80 81transformed_dataset = TransformDataset(dogscats_dataset, adapt_data_to_convolution2d_format) 82 83 84#学習データと検証データを分ける 85 86#前処理済みのデータをランダムに8:2の割合で分割する 87train_data, test_data = datasets.split_dataset_random(transformed_dataset, int(len(transformed_dataset) * 0.8), seed=0) 88 89 90GPU_ID = -1 #0を-1に変更してみた 91BATCH_SIZE = 64 92MAX_EPOCH = 10 93 94#CNN(畳み込みニューラルネットワーク)の設定 95 96class CNN(Chain): 97 #コンストラクタ 98 def __init__ (self): 99 super(CNN, self).__init__() 100 101 with self.init_scope(): 102 self.conv1 = L.Convolution2D(None, out_channels=32, ksize=3, stride=1, pad=1) 103 self.conv2 = L.Convolution2D(in_channels=32, out_channels=64, ksize=3, stride=1, pad=1) 104 self.conv3 = L.Convolution2D(in_channels=64, out_channels=128, ksize=3, stride=1, pad=1) 105 self.conv4 = L.Convolution2D(in_channels=128, out_channels=256, ksize=3, stride=1, pad=1) 106 self.layer1 = L.Linear(None, 1000) 107 self.layer2 = L.Linear(1000, 2) 108 109 def __call__(self, input): 110 func = F.max_pooling_2d(F.relu(self.conv1(input)), ksize=2, stride=2) 111 func = F.max_pooling_2d(F.relu(self.conv2(input)), ksize=2, stride=2) 112 func = F.max_pooling_2d(F.relu(self.conv3(input)), ksize=2, stride=2) 113 func = F.max_pooling_2d(F.relu(self.conv4(input)), ksize=2, stride=2) 114 func = F.dropout(F.relu(self.layer1(func)), ratio=0.80) 115 func = self.layer2(func) 116 return func 117 118model = L.Classifier(CNN()) 119model.to_cpu() #to_gpu(GPU_ID)を変更してみた 120 121#学習用の反復子 122train_iterator = iterators.MultiprocessIterator(train_data, BATCH_SIZE) 123#検証用の反復子 124test_iterator = iterators.MultiprocessIterator(test_data, BATCH_SIZE, False, False) 125 126optimizer = optimizers.Adam().setup(model) 127 128updater = training.StandardUpdater(train_iterator, optimizer, device=GPU_ID) 129 130trainer = Trainer(updater, stop_trigger=(MAX_EPOCH, "epoch")) 131 132trainer.run()

以下のようなサイトを参考にしつつ考えてみましたが解決できませんでした。分かる方いましたら回答よろしくお願いします。
https://www.amelt.net/imc/programming/python/3640/

文字数の関係上エラー内容はこちらにに記述させていただきます。
エラー内容はこちら

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

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

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

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

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

guest

回答2

0

自己解決

np.uint8をunit8にしていたのが間違いでした。また、画像ファイルの最後に/をつけ忘れていました。

投稿2021/07/12 06:09

seyu0930

総合スコア20

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

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

0

FileNotFoundError: [Errno 2] No such file or directory: '/Users/haru/dogscats/train/catscat.1171.jpg'

って書いてあるので、画像ファイルが足りないのでしょう
(足りないのは、上記1枚だけとは限らない)

投稿2021/07/11 10:08

jbpb0

総合スコア7651

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

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

seyu0930

2021/07/12 05:36

今朝もう一度実行してみたらエラー内容が変わっていました。 Exception in main training loop: 'NoneType' object has no attribute 'thread' Traceback (most recent call last): File "/usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/trainer.py", line 343, in run update() File "/usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/updaters/standard_updater.py", line 240, in update self.update_core() File "/usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/updaters/standard_updater.py", line 245, in update_core batch = iterator.next() File "/usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/iterators/multiprocess_iterator.py", line 147, in __next__ if self._prefetch_loop.thread is None: Will finalize trainer extensions and updater before reraising the exception. --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-29-041e2033e90a> in <module> ----> 1 trainer.run() /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 374 f.write('Traceback (most recent call last):\n') 375 traceback.print_tb(sys.exc_info()[2]) --> 376 six.reraise(*exc_info) 377 finally: 378 for _, entry in extensions: /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/six.py in reraise(tp, value, tb) 717 if value.__traceback__ is not tb: 718 raise value.with_traceback(tb) --> 719 raise value 720 finally: 721 value = None /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/trainer.py in run(self, show_loop_exception_msg) 341 self.observation = {} 342 with reporter.scope(self.observation): --> 343 update() 344 for name, entry in extensions: 345 if entry.trigger(self): /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/updaters/standard_updater.py in update(self) 238 239 """ --> 240 self.update_core() 241 self.iteration += 1 242 /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/training/updaters/standard_updater.py in update_core(self) 243 def update_core(self): 244 iterator = self._iterators['main'] --> 245 batch = iterator.next() 246 in_arrays = convert._call_converter( 247 self.converter, batch, self.input_device) /usr/local/Caskroom/miniforge/base/envs/ds_env/lib/python3.8/site-packages/chainer/iterators/multiprocess_iterator.py in __next__(self) 145 def __next__(self): 146 measure_mode = False --> 147 if self._prefetch_loop.thread is None: 148 if self._prefetch_loop.measure_required(): 149 measure_mode = True AttributeError: 'NoneType' object has no attribute 'thread'
seyu0930

2021/07/12 05:49

全てのセルを実行した場合最初に質問したエラーが出て FileNotFoundError: [Errno 2] No such file or directory: '/Users/haru/dogscats/train/catscat.1171.jpg' の画像ファイルが毎回かわります。 全てのセルを実行した後、trainer.run()だけをもう一度実行すると返信で記述したエラーが出ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問