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

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

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

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

Keras

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

2回答

3276閲覧

データセットの作り方がわからない

ganariya

総合スコア50

Chainer

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

Keras

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

4グッド

10クリップ

投稿2018/02/13 14:17

前提・実現したいこと

「ゼロから作るディープラーニング」を読み終えた学生です。
せっかくディープラーニングをかじり始めたため、自分に役に立つことをディープラーニングを利用してやってみようと考えました。
そこで、KerasもしくはChainerを使用して、下記のmake.girls.moeサイトで自動生成された女の子たち
自動生成された女の子たち
を自分のタイプか、タイプでないかを分類し、自分の最高の嫁を探そうと考えました。

発生している問題

自分の好みか好みでないかを判断するために、まずは自分が好きなタイプのデータセットを作成しなければいけません。
そこで、データはおよそ12000個あるため約1000個のデータに
1・・嫌い 2・・少し嫌い 3・・普通 4・・少し好き 5・・好き
の5分類を自分でつけて、学習を行い残りのデータを分類しようと考えました。

しかし、ゼロから作るディープラーニングではMNISTを使用し、データセットの作成が記述されておらず関数を使用してデータセットをダウンロードする方式だったので、データ・セットを作るやり方が記述されておりませんでした。
また、インターネットで調べてみても、データセットをすでに作り終わっており、分類し始めるところからでした。

データセットをどうやって作っているのかアドバイスいただければ幸いです。

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

環境
・iMac
・Jupyter Notebook
・make.girls.moe(画像を生成させていただいたサイト)

k0a, LouiS0616, yakitori99, yohehe👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

私も「ゼロから作るDeeplearning」からAIの勉強を始めましたが、自分なりに色々試行錯誤した結果なんとかできたようなものなので参考程度にしてください。

まずMNISTデータのように画像を配列に変える必要があります。私はCV2をインストールしてこれを行っており、CODEは以下のようなものです。

python

1filenames = os.listdir(r"C:\Users\Desktop\data") #dataというフォルダにある画像を読み込み 2num_files = len(filenames) #画像数を把握し 3 4data = np.zeros((num_files,1,h,w)) #画像データの箱を用意し 5#画像をひとつずつ読み込み箱に入れていく 6for i,filename in zip(range(num_files),filenames): 7 one_data = cv2.imread(filename,0) #cv2で画像を読み込んで 8 one_data = cv2.resize(one_data,(h,w)) #認識NNに合わせてサイズ変換し 9 data[i] = one_data #箱に入れていく

このdataが画像データになります。
教師データについては自分なりに考えてみてください。
好き嫌いで5つに分けたいのであれば、教師データは0から4までの値になると思います。
例えば画像データ名を(like_1.png,like_2.png)のように(好き嫌い度_番号.png)のように統一すれば

python

1t = np.zeros((num_files),dtype='int32') #教師データの箱を用意し 2#画像名から好き嫌い度を読み取って教師データをつくる 3for i,filename in zip(range(num_files),filenames): 4 like_or_dislike = filename.split("_")[-2] #画像名の一番前のlikeとかを読み込んで 5 if like_or_dislike == "like": #likeなら 6 t[i] = 0 #0 7 if like_or_dislike == "dislike": #dislikeなら 8 t[i] = 1 #1

このように教師データtを作れます。

それと私の勘ですが、好き嫌いを識別するのは結構むずかしいのでデータ数をもっと増やすか、層数の深い認識NNを作ったほうがいいのかな、とは思います。

参考になれば幸いです。

投稿2018/02/13 16:47

mmss

総合スコア46

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

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

mmss

2018/02/13 16:50

私はChainerを使っているので教師データは1値でしたが、使ってない場合はone_hot_labelになるかもしれないのでその場合は以下のようにしてみてください。 t = np.zeros((num_files),5,dtype='int32') #教師データの箱を用意し for i,filename in zip(range(num_files),filenames): like_or_dislike = filename.split("_")[-2] #画像名の一番前のlikeとかを読み込んで if like_or_dislike == "like": #likeなら t[i] = [1,0,0,0,0] if like_or_dislike == "dislike": #dislikeなら t[i] = [0,0,0,0,1]
mkgrei

2018/02/14 00:39 編集

連続的な予測値ですし、分類ではなく、回帰でやることも考えられます。 後はキャラクタなので色も重要かもしれません。 RGBで読み込んでチャンネルを増やすことも検討して見てはいかがでしょう。
ganariya

2018/02/15 09:04

ありがとうございます! Chainerの本を買ったので、データセットを作って色々試して見たいと思います
guest

0

mkgreiさんが説明されていますが一応回答として書いておきます。
Kerasでやってみる場合について説明します。またMNISTのデータセットの形状がどのようになっているかを説明してから質問者様が作ろうとしているデータセットについて説明します。

ゼロから作るディープラーニングではMNISTを使用し、データセットの作成が記述されておらず関数を使用してデータセットをダウンロードする方式だったので、データ・セットを作るやり方が記述されておりませんでした。

まずMNISTのデータセットはどうなっているか確認してみましょう。

python

1from keras.datasets import mnist 2from keras.utils import np_utils 3import numpy as np 4from pprint import pprint 5 6#Kerasでmnistをloadするとラベルをフラットにしてくるので整形しています 7nb_classes = 10 8y_train = np_utils.to_categorical(y_train, nb_classes) 9y_test = np_utils.to_categorical(y_test, nb_classes) 10pprint(x_train.shape) 11pprint(y_train.shape) 12pprint(x_test.shape) 13pprint(y_test.shape) 14# 1枚取り出してみる 15pprint(y_train[0]) 16pprint(np.argmax(y_train[0])) 17 18""" 19~~訓練データ~~ 20画像のほうは28*28が6万枚あります 21(60000, 28, 28) 22画像1枚に対応するラベルのほうは0~9までの数字が10パターンありかつ6万個あります 23(60000, 10) 24~~テストデータ~~ 25テストのほうは枚数が違うだけなので説明は飛ばします 26(10000, 28, 28) 27(10000, 10) 28 29~~ラベルについて~~ 30数字の5を表現するためにonehotの形にしてあります 31array([ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]) 32上の配列の若い方から0, 1, 2, ..., 9と数字に対応しており、 331が立っている部分によってこの配列は特定の数字であると表現することができます 345 35"""

人工知能に関する断創録 - KerasでMNIST

そこで、データはおよそ12000個あるため約1000個のデータに

1・・嫌い 2・・少し嫌い 3・・普通 4・・少し好き 5・・好き
の5分類を自分でつけて、学習を行い残りのデータを分類しようと考えました。

MNISTとは異なり、質問者様の場合5個に分類できるラベルを12000個用意する必要があります。

python

1import numpy as np 2from keras.utils import np_utils 3 4nb_classes = 5 5# このcategoryiesというのは質問者様の用意された画像に対するラベルがすでにわかっている状態 6# やり方についてはmmssさんが説明されていますね 7categories = np.random.randint(nb_classes, size=12000) 8pprint(categories) 9""" 10画像に対応する好きの度合い(0~4)が格納された配列を渡してあげます 11array([3, 4, 2, 2, 1, 1, 2, 1, 1, 4,...]) 12""" 13labels = np_utils.to_categorical(categories, nb_classes) 14pprint(labels.shape) 15# 1枚取り出してみる 16pprint(labels[0]) 17pprint(np.argmax(labels[0])) 18""" 19(12000, 5) 20array([ 0., 1., 0., 0., 0.]) 211 22"""

画像の訓練、テストデータについてはmmssさんが説明されているので省略しますね。

20180215追記

mkgreiさんが言及されていますが正直好き嫌いの連続的な情報を5つに分類するのは難しいかなと自分も思っています。ただここまで質問者様がデータセットやアイディアを準備されているので結果がどうあれひとまずひととりの手順を踏んでみるのは良い勉強になるかなと思いこの回答をしています。

投稿2018/02/14 11:29

編集2018/02/15 10:56
wakame

総合スコア1170

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

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

ganariya

2018/02/15 09:09

以前から教師データの配列の作り方をこんなふうにしようかなと以下のように考えていました。 例えば、ある女の子がとても好きなときは5、とても好きでないときに1とする時 csvファイルなどに 「1番目の女の子・・・3」 「2番目の女の子・・・5」 一定数の教師データとして記入して、それをプログラムで配列として読み込むというのは大丈夫でしょうか(機械学習における世界で普通なのでしょうか)?
wakame

2018/02/15 10:42

画像とラベルでそれぞれ対応がとれるのであればテキストファイルでもcsvファイルでもいいと思いますよ。ただ、データセットを読み込む時の手段が楽であればあるほど好まれるのでnumpyのnpzファイルだったり、hdf5ファイルなどがよく使われるのを目にしますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問