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

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

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

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

Q&A

0回答

1148閲覧

kerasをこれから学びたい

million

総合スコア6

Keras

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

0グッド

0クリップ

投稿2018/01/12 04:30

###前提・実現したいこと
これからkerasを学ぼうと思い、調べていました
こちらのソースの仕組み、処理の仕組み、どのように動いているか教えていただけませんか?
それと何を元にパーセンテージ表示しているのかも教えていただけると助かります。

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

エラーメッセージ

###該当のソースコード
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout, Convolution2D, Flatten, MaxPooling2D
from keras.utils.np_utils import to_categorical
from keras.optimizers import Adagrad
from keras.optimizers import Adam
import numpy as np
from PIL import Image
import os

学習用のデータを作る.

image_list = []
label_list = []

./data/train 以下のorange,appleディレクトリ以下の画像を読み込む。

for dir in os.listdir("data/train"):
if dir == ".DS_Store":
continue

dir1 = "data/train/" + dir label = 0 if dir == "kisenosato": # 稀勢の里はラベル0 label = 0 elif dir == "hashimoto": # 橋本環奈はラベル1 label = 1 elif dir == "hirose": # 広瀬すずはラベル2 label = 2 for file in os.listdir(dir1): if file != ".DS_Store": # 配列label_listに正解ラベルを追加(稀勢の里:0 橋本環奈:1 広瀬すず:2) label_list.append(label) filepath = dir1 + "/" + file # 画像を100x100pixelに変換し、1要素が[R,G,B]3要素を含む配列の100x100の2次元配列として読み込む。 # [R,G,B]はそれぞれが0-255の配列。 image = np.array(Image.open(filepath).resize((100, 100))) print(filepath) # 配列を変換し、[[Redの配列],[Greenの配列],[Blueの配列]] のような形にする。 image = image.transpose(2, 0, 1) print(image.shape) # 出来上がった配列をimage_listに追加。 image_list.append(image / 255.)

kerasに渡すためにnumpy配列に変換。

image_list = np.array(image_list)

ラベルの配列を1と0からなるラベル配列に変更

0 -> [1,0,0], 1 -> [0,1,0] という感じ。

Y = to_categorical(label_list)

モデルを生成してニューラルネットを構築

model = Sequential()
model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape=(3, 100, 100)))
model.add(Activation("relu"))
model.add(Convolution2D(32, 3, 3))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), border_mode=("same")))
model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(200))
model.add(Activation("relu"))
model.add(Dropout(0.2))

model.add(Dense(200))
model.add(Activation("relu"))
model.add(Dropout(0.2))

model.add(Dense(3))
model.add(Activation("softmax"))

オプティマイザにAdamを使用

opt = Adam(lr=0.0001)

モデルをコンパイル

model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])

学習を実行。10%はテストに使用。

model.fit(image_list, Y, nb_epoch=1000, batch_size=25, validation_split=0.1)

テスト用ディレクトリ(./data/train/)の画像でチェック。正解率を表示する。

total = 0.
ok_count = 0.

for dir in os.listdir("data/test"):
if dir == ".DS_Store":
continue

dir1 = "data/test/" + dir label = 0 if dir == "kisenosato": label = 0 elif dir == "hashimoto": label = 1 elif dir == "hirose": label = 2 for file in os.listdir(dir1): if file != ".DS_Store": label_list.append(label) filepath = dir1 + "/" + file image = np.array(Image.open(filepath).resize((100, 100))) print(filepath) image = image.transpose(2, 0, 1) result = model.predict_classes(np.array([image / 255.])) print("label:", label, "result:", result[0]) total += 1. if label == result[0]: ok_count += 1.

print("seikai: ", ok_count / total * 100, "%")
###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

mkgrei

2018/01/12 05:34

コメントがたくさんついていますが、どこがわからないのでしょうか?もう少し具体的にお願いします。
million

2018/01/12 05:58

申し訳ありません。ネットからソースを直接貼ってしまいコメントもついてきてしまいました。このソースがどのように動いているかがなんとなくでしか理解できませんでした。画像を読み込み、色での配列に変換しkerasが読み込めるようにnumpy配列に変換。そのあとの処理がよく理解できていません。それと最後の正解率の表示と書いてありますが、別の画像を入れ動かしてみたのですが、正解率の数字と実際に数えてみて出したパーセンテージが一致しなかったので、何を元にしてパーセンテージを表示しているのかがわからなかったため質問させていただきました。
mkgrei

2018/01/12 09:51

知りたいことはpythonの実装の関連することでしょうか?また深層学習についてはどれほど理解しているのでしょうか?
million

2018/01/17 11:48

返信遅れてしまい申し訳ありませんでした。知りたいことはこのソースが上からどのような手順で動いているか、です。画像の読み込みまでは理解できているのですが、ニューラルネット形成の上で”model.add(Flatten())”から下の動きがよくわからなかったのと、テストのは方の処理が知りたかったことです。深層学習につきませしては勉強を始めたばかりでまだ深く理解はしていません。ですが頂いたじねっbちでわからないことがあれば自分で調べたいと思うので、私の理解を気にせずに解説をしていただけますと助かります。
million

2018/01/17 11:50

頂いた質問でわからない、が正しいコメントです。誤字申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問