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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

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

Python

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

Q&A

解決済

1回答

1100閲覧

CNNにおける2入力について

退会済みユーザー

退会済みユーザー

総合スコア0

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

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

Python

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

0グッド

0クリップ

投稿2020/12/12 07:25

現在、CNNでKerasを使い画像認識をしています。
そして重み共有を使い、画像を同時に2つ入力しようと思いました。

そこでお聞きしたいのは、
データの配列を2つ用意しておかないといけないのでしょうか?

例:

class = [.....]
model.fit([x_train1,x_train2],y_train,...)

model.evaluate([x_test1,x_test2],y_test)

今は、classからx_train,x_testと分けていますが、classの配列とは別に作らないと
いけないのでしょうか?

class2 = [....]

教えていただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

画像を同時に2つ入力しよう

犬と猫の画像があり、これを識別するネットワークを作るイメージと理解しました。

画像自体がx_○○、犬や猫のラベル(正解情報)がy_○○に当たります。この時、ラベルをクラスと表現することがあると思います。例えば、犬のクラスが0、猫のクラスが1、画像が10枚あれば、y_train = np.asarray([0,1,1,0,1,0,1,0,1,1])のような感じです。
※もしTensorflowを使うのであれば、ラベル情報の最小値は0から始まらないと学習がまともにできない(1から始まるといくら学習しても学習の正解率がゼロになります)ので注意してください。

クラス:犬、猫等に相当。数値で言えば0,1,2,...
ラベル:画像とセットの正解データ。pythonで言えば、np.asarray([0,1,0,0,1,1,...])

学習させる時には、model.fit(x_train, y_train)のような形になります。
評価する時には、model.predict([何かしらの画像])となります。もし評価画像が二枚あるのであれば、model.predict([画像1,画像2])のようになります。
この時、学習時も評価時も、通常のフォーマットは(枚数,幅,高さ,ch数)の形式です。

データの配列を2つ用意しておかないといけないのでしょうか?

いけなくはないですが、これをしないとイカサマ状態になってしまいます。両方同じデータでも動くは動きますが、過学習が検出できません。

例えば、学校のテストでヤマを張ってヤマが丸ごと出てきたときには対応できても(本当に覚えた、というよりも過適合している状態です)、ヤマ以外の問題が出てきたときに対応できない(本当はちゃんと覚えていなかったことが露呈)となると思います。機械学習でこの過適合を検出するための準備処理が上記の分割処理です。

具体的には、「x_train,x_testに分ける理由は、学習用のデータと、学習できているかのテスト用(学習には使わない、テスト用のためだけのデータ)に分け、学習時した結果に汎化性があるかどうかを検証するデータを用意するため」です。

自前でデータを用意する時には、まとまってデータを用意して(例えば1000個)、8-9割を学習用、1-2割をテスト用に割り振ります。
※このような方法を「ホールドアウト法」と呼んでいます。データが少ない場合には「クロスバリデーション法」(使うデータを切り替えながらホールドアウト法を複数回行う方法)も用いられます。

これでいかがでしょうか?

投稿2020/12/13 07:07

編集2020/12/13 08:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/12/13 07:22

大変わかりやすく説明していただきありがとうございます。 ようやく理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問