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

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

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

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

1回答

1415閲覧

chainerでfine-tuningを行うとtrainer.run()でエラーが生じる

bas

総合スコア9

Chainer

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2020/01/19 07:42

前提・実現したいこと

犬と猫の画像をCNNで分類するシステムを作っています。
環境はgoogle colaboratoryで、フレームワークはchainerを使っています。
また、画像はgoogle driveから読み込み、ネットワークはvggを使っています。
しかし、trainer.run()を実行すると下記のようなエラーが出てしまいます。

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last) <ipython-input-23-041e2033e90a> in <module>() ----> 1 trainer.run() 8 frames /usr/local/lib/python3.6/dist-packages/chainer/dataset/convert.py in _concat_arrays(arrays, padding) 252 with chainer.using_device(device): 253 arr_concat = device.xp.concatenate( --> 254 [array[None] for array in arrays]) 255 256 return arr_concat <__array_function__ internals> in concatenate(*args, **kwargs) ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 3 and the array at index 8 has size 4

該当のソースコード

import glob import chainer import chainer.links as L import chainer.functions as F import numpy as np import pandas as pd from google.colab import drive from PIL import Image from sklearn.model_selection import train_test_split from chainer.datasets import tuple_dataset from chainer import training from chainer.training import extensions #google driveにマウント drive.mount('/content/drive') #ファイルパス取得 path1 = glob.glob("/content/drive/My Drive/classification/dog*.jpg") path2 = glob.glob("/content/drive/My Drive/classification/cat*.jpg") #ラベル配列作成 t1 = np.array( [] ) t2 = np.array( [] ) for i in range(len(path1)): t1 = np.append( t1, 0 ) for i in range(len(path2)): t2 = np.append( t2, 1 ) t1 = t1.astype('int32') t2 = t2.astype('int32') #画像前処理 imageData1 = []  imageData2 = [] for i in range(len(path1)): img = Image.open(path1[i]) img = img.resize((224, 224)) img = np.asarray(img) img = img.transpose(2,1,0) img = img.astype(np.float32) img = img / 255 imageData1.append(img) for i in range(len(path2)): img = Image.open(path2[i]) img = img.resize((224, 224)) img = np.asarray(img) img = img.transpose(2,1,0) img = img.astype(np.float32) img = img / 255 imageData2.append(img) #データ整理 x_train1, x_test1, t_train1, t_test1 = train_test_split(imageData1, t1, test_size=0.3, random_state=0) x_train1, x_test2, t_train2, t_test2 = train_test_split(imageData2, t2, test_size=0.3, random_state=0) x_train = [] for i in range(len(x_train1)): x_train.append(x_train1[i]) for i in range(len(x_train2)): x_train.append(x_train2[i]) x_test = [] for i in range(len(x_test1)): x_test.append(x_test1[i]) for i in range(len(x_test2)): x_test.append(x_test2[i]) t_train = [] for i in range(len(t_train1)): t_train.append(t_train1[i]) for i in range(len(t_train2)): t_train.append(t_train2[i]) t_test = [] for i in range(len(t_test1)): t_test.append(t_test1[i]) for i in range(len(t_test2)): t_test.append(t_test2[i]) train = tuple_dataset.TupleDataset(x_train, t_train) test = tuple_dataset.TupleDataset(x_test, t_test) #ネットワーク class VGG(chainer.Chain): def __init__(self, class_labels=2): super(VGG, self).__init__() with self.init_scope(): self.base = L.VGG16Layers() self.fc6 = L.Linear(512 * 7 * 7, 4096) self.fc7 = L.Linear(4096, 4096) self.fc8 = L.Linear(4096, class_labels) def __call__(self, x): h = self.base(x, layers=['pool5'])['pool5'] h = F.dropout(F.relu(self.fc6(h))) h = F.dropout(F.relu(self.fc7(h))) return self.fc8(h) #設定 batchsize = 32 train_iter = chainer.iterators.SerialIterator(train, batchsize) test_iter = chainer.iterators.SerialIterator(test, batchsize, repeat=False, shuffle=False) vgg = VGG() model = L.Classifier(vgg) vgg.base.disable_update() #model.base.disable_update() gpu = 0 if gpu >= 0: chainer.cuda.get_device(gpu).use() model.to_gpu() opt = chainer.optimizers.Adam() opt.setup(model) epoch = 15 updater = training.StandardUpdater(train_iter, opt, device=gpu) trainer = training.Trainer(updater, (epoch, 'epoch'), out='/cifar/result') trainer.extend(extensions.Evaluator(test_iter, model, device=gpu)) trainer.extend(extensions.dump_graph('main/loss')) trainer.extend(extensions.snapshot(), trigger=(epoch, 'epoch')) trainer.extend(extensions.LogReport()) trainer.extend(extensions.PrintReport( ['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy'])) trainer.extend(extensions.ProgressBar()) %学習 trainer.run()

試したこと

画像の前処理が怪しいかなと個人的には思いましたが、、、

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

コード自体には問題がなく、画像データに問題があったみたいです。
お騒がせしました。

投稿2020/01/19 13:42

bas

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問