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

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

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

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

Q&A

解決済

1回答

536閲覧

自作データの機械学習(画像認識)

nnnnn.na

総合スコア7

OpenPose

OpenPoseとは、深層学習を使って人の体や指などの位置(座標)や向きといったポーズを可視化する技術。関節点など人の体における特徴点が座標のどこにあるかを検出することができます。高性能プロセッサを使えば動画像内の複数の人物もリアルタイムで検出することが可能です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

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

0グッド

0クリップ

投稿2020/01/22 08:55

とあるサイトをみて自作データを学習させテストをするというプログラミングを
見つけたので行ってみました。

folderにそれぞれの画像を保存しており

stannd=立った姿勢の画像
sit=中腰の画像
manaka=中腰の画像
の画像を保存しており
3種類を分類したいと考えています。

しかし、結果の制度が高すぎて(100%)
であったり100%近くなのであっているか不安なのですが
正確かどうかわかるかた教えていただきたいです。

よろしくお願いします。
参考にしたサイトはこちらです。
https://newtechnologylifestyle.net/keras%E3%81%AEcnn%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E7%94%BB%E5%83%8F%E3%81%A7%E7%94%BB%E5%83%8F%E8%AA%8D%E8%AD%98%E3%82%92%E8%A1%8C%E3%81%A3/

import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
import numpy as np
from sklearn.model_selection import train_test_split
from PIL import Image
import glob

folder = ["standnew","sit70new","mannakanew"]
image_size = 50

X = []
Y = []
for index, name in enumerate(folder):
dir = "./" + name
files = glob.glob(dir + "/*.jpg")
for i, file in enumerate(files):
image = Image.open(file)
image = image.convert("RGB")
image = image.resize((image_size, image_size))
data = np.asarray(image)
X.append(data)
Y.append(index)

X = np.array(X)
Y = np.array(Y)

X = X.astype('float32')
X = X / 255.0

正解ラベルの形式を変換

Y = np_utils.to_categorical(Y, 4)

学習用データとテストデータ

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20)

CNNを構築

model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(4))
model.add(Activation('softmax'))

コンパイル

model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])

#訓練
history = model.fit(X_train, y_train, epochs=200)

#評価 & 評価結果出力
print(model.evaluate(X_test, y_test))

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

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

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

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

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

guest

回答1

0

ベストアンサー

しかし、結果の制度が高すぎて(100%)

結果の精度とは学習データに対する精度でしょうか?
学習に使用していないテストデータに対する精度がよいかどうかで判断しましょう。

追記

url場だと、women,dog,cat,lionの4種類で行っていて

私自身は三種で行っていますが問題はないかもしお分かりであれば教えてください

学習する上で問題はないですが、冗長なので、以下のは3クラスに合わせて変更したほうがよいと思います。

diff

1- Y = np_utils.to_categorical(Y, 4) 2+ Y = np_utils.to_categorical(Y, 3)

diff

1- model.add(Dense(4)) 2+ model.add(Dense(3))

最後のほうに訓練データでは98%をいっていましたが、結果が70%という非常に悪い成績になりました。
とあるのですが訓練データ98と結果70の違いがわかりません。教えていただけませんでしょうか

訓練データに対する精度が98%でテストデータに対する精度が70%だったということを言っています。
学習に使用したデータに対する精度が高いのは当たり前で、汎化性能を見るにはテストデータに対する精度を見る必要があります。
例えば、テスト勉強したとして、勉強したのと全く同じ問題が出たら、できて当たり前ですよね。

今回、100%に近いということで訓練データで出した値なのではないかと疑ったのですが、print(model.evaluate(X_test, y_test)) で出てきた値なら、単に性能がいいモデルができたということだと思います。

投稿2020/01/22 08:58

編集2020/01/22 11:39
tiitoi

総合スコア21956

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

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

nnnnn.na

2020/01/22 09:18

urlの最後に載っている実際にテストを行った後の評価と評価結果の事です。 url見ていただいたほうがわかりやすいと思うので お手数でなければ見ていただけませんでしょうか。よろしくお願いします。
tiitoi

2020/01/22 09:21 編集

URL を拝見しました。 model.evaluate(X_test, y_test) の値が 100% に高い値なのだとしたら、その値をモデルの性能として信用していいのではないでしょうか。 もちろん、学習データとテストデータの画像が似ていれば、そのぐらい高い値が出るということも考えられます。
nnnnn.na

2020/01/22 09:28

ありがとうございます。 あと少し不安な点と、お伺いしたいことがあるのですが 不安な点 url場だと、women,dog,cat,lionの4種類で行っていて 私自身は三種で行っていますが問題はないかもしお分かりであれば教えてください お伺いしたいこと 最後のほうに 訓練データでは98%をいっていましたが、結果が70%という非常に悪い成績になりました。 とあるのですが訓練データ98と結果70の違いがわかりません。教えていただけませんでしょうか よろしくお願いいたします。 何個も何個も申し訳ございません。
tiitoi

2020/01/22 11:40

追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問