🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Python

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

Q&A

解決済

2回答

966閲覧

ニューラルネットワークを用いた画像認識2

退会済みユーザー

退会済みユーザー

総合スコア0

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Python

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

0グッド

0クリップ

投稿2021/02/16 03:10

編集2021/02/16 16:57

https://note.com/maako_0810/n/n51943c87e01e

ここに従って行うと、任意の手書き数字を認識、出力する事ができるようなのですが、
逆に、認識の際に用いる数字のデータセットを任意に変更するにはどうするのでしょうか?
例えば、認識の際用いられる数字のデータセットは、
0,1,2,3,4,5,6,7,8,9の数字のデータが入っていると思うのですが、
ここに、0の代わりに「あ」を入れて
あ,0,1,2,3,4,5,6,7,8,9
のデータセットを作りたい、となったらどうするのか。「あ」を認識したいのですが。

具体的には以下になります。

例えば、木を8つ組み合わせたオリジナルの漢字、読み方を「ジャングル」とする、を認識できるようにしたい。
これを行うには、この「ジャングル」という漢字の画像を、ラベルを「ジャングル」としてデータリストに加える必要がありますが、
これはどのように行えば良いのか(逆に、自分で描いた数字を認識、判別させる方法は。サイトの説明にあるので、今回も、途中まではこの通りに行えば良いと思われるが、途中からどのように行うのかが分からない)。
mnistのデータリスト内の画像をいじれば良いのだろうけど、どのようにそれを行えば良いのかが分からないので、教えて頂きたいです。

有力な情報を得ました、参考に。

Kerasでmnist.load_data()したときにデフォルトでデータがセーブされる場所
は、
C:\Users\username.keras\datasets
になるそうです、実際にdatasetsがありました。

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

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

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

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

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

jbpb0

2021/02/16 15:44

機械学習の分類の学習データは、各ラベルのデータ数が均等に近い方が望ましく、数の偏りが大きいと、下記Webページに書かれてるようなことを考慮する必要が出てきます https://qiita.com/ryouta0506/items/619d9ac0d80f8c0aed92 mnistの学習データは60000あり、各数字が約6000あるので、mnistに単純に追加するのなら、6000に近いデータを用意するのが望ましいです あるいは、mnistから、各数字がだいたい同じ数になるように一部を取り出して、それに追加するのなら、用意するデータ数は、もっと少なくて済みます
退会済みユーザー

退会済みユーザー

2021/02/16 18:15 編集

ニューラルネットワークについて調べている間に、なんとなく掴めてきたんですけど、 数字と「あ」だけであれば、数が少ない(11個しかない)から、 「あ」の画像がたとえ1枚であっても、「あ」は結構な確率で認識できるんじゃないかなと思ったんですが、どうなんでしょうか? 11個しかないラベルの、いずれかに振り分けられるわけだから、「あ」なんて複雑な字、「あ」であるとしか判断できないんじゃないかなと・・・。
jbpb0

2021/02/17 14:10 編集

追加した画像の特徴が他のラベルの画像と全く異なり、追加した画像1枚を正しく推定できるように学習しても、副作用がなく他のラベルの画像の正解数が減らないのなら、わずか画像1枚でも正解数が増えた方がトータルの正解率が上がるので、AIはその学習を選択するでしょうから、テスト画像でも正解する可能性が高くなるでしょう しかしながら、追加した画像1枚を正しく推定できるように学習した副作用で、他のラベルの画像で間違う数が増えて正解数が減ったら、トータルの正解率が下がるため、AIはその学習を選択しないでしょう
guest

回答2

0

国立国会図書館が試験公開している平仮名73文字のデータセットがあるので、
それを学習データとすると幸せになれるかも。

投稿2021/02/16 04:29

kaina

総合スコア418

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

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

退会済みユーザー

退会済みユーザー

2021/02/16 09:11 編集

ありがとうございます。 自分で追加してみたいのですが、その場合はどうすれば・・・。 例えば、自分で作り出した存在した漢字(例えば、木を8つ組み合わせ時、読み方をジャングル、とする) を認識させて、その読み方(ジャングル)を表示できるように、したいのですが。 その場合、既にある正規の漢字データでは、意味がないのです。
guest

0

ベストアンサー

はじめまして

現在、参考にしているMNISTデータセットを使用した文字認識は
MNISTで公開されている
手書き文字を使用して学習を行っています

これは28x28の画像の羅列にラベルを振って識別しています

以下コードのx_trainがその学習データになるので
この中にの画像データをたくさん追加して
新しいラベルを振ってあげれば認識できるかもしれません

python

1mnist = tf.keras.datasets.mnist.load_data() 2train, test = mnist 3(x_train, y_train),(x_test, y_test) = mnist

投稿2021/02/16 03:58

DaiGuard

総合スコア159

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

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

退会済みユーザー

退会済みユーザー

2021/02/16 09:23 編集

ありがとうございます、 それはどのように行うのでしょうか・・・ 説明ページでは、逆の、手書きの8を8であると認識させる、手法が載っていますが、それは以下のコードによるようです(python)。 from PIL import Image img = Image.open('drive/My Drive/画像のファイル名').convert('L') img.thumbnail((28, 28)) # 28*28に変換 img = np.array(img) # numpy arrayに変換 test_data[np.newaxis].shape plt.imshow(img) 1行目: PILという画像処理ライブラリをインポートします。 2行目: 画像ファイルの読み込みです。 とあり、ここまでは今やろうとしている事も同じようにするのではないかと思うのですが・・・ test_data[np.newaxis].shape plt.imshow(img) これも、画像を読み取り易いように変換(かつ描画?)しているようで、ここも同じでしょうか・・・? pred = model.predict(img[np.newaxis]) np.argmax(pred) ここは、よく分からない(なぜ2行なのだろう)のですが、predictとあるので予想しているわけであって、 今回はこれとは逆の操作をしたいので、ここを変える必要があると思うのですが(たぶん)、 どのように変えれば良いのでしょう・・・。
DaiGuard

2021/02/16 13:11

上に書かれている ```python pred = model.predict(img[np.newaxis]) np.argmax(pred) ``` はMNISTで学習したモデルに 手書きで入れた`8`の画像データを入れたら`8`と認識したかを 確認している処理になります 今回、新しい文字`あ`を追加するので 学習モデルを作るところから始める必要があります 手順1:学習セットを作る MNISTからダウンロードしてきた学習セットの`x_train`と`x_test`にある `0`の画像データをすべて`あ`の画像に入れ替える ```python mnist = tf.keras.datasets.mnist.load_data() train, test = mnist (x_train, y_train),(x_test, y_test) = mnist ``` 手順2:モデルを学習させる `0`を`あ`に入れ替えた学習セットでモデルを学習させる ```python model.compile( optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=[tf.keras.metrics.sparse_categorical_accuracy] ) model.fit(x_train, y_train, epochs=5)​ ``` 手順3: モデルの精度を確認する `あ`の画像データをモデルに読み込ませることで ラベル0が最も確率が高くなるか確認する ```python pred = model.predict( "`あ`の画像データ ") np.argmax(pred) ```
退会済みユーザー

退会済みユーザー

2021/02/16 13:29

ありがとうございます! まだやっていないのですが、 手順1について、 これはつまり、PC上にMNISTは保存されていて(どこにされているんだろう・・・)そのデータの一部を書き換えているという事でしょうか、編集でなく「追加」する場合はどうするのでしょうか(更に大変なのでしょうか) また、「あ」の画像のアドレスがコード内にないように思うのですが、そこはどうしているんでしょうか。 また、手順3で「0」の確率が最大とならなかった場合は、手順2の5?の所の値を6以上に増やす感じでしょうか?
DaiGuard

2021/02/16 13:44

MNISTからダウンロードしたファイル自体がどこに保存されているか私にはわかりません。 `あ`の画像データに入れ替えるとは以下のようにプログラム上で入れ替える方法です ``` from PIL import Image img = Image.open('`あ`の画像のファイル名').convert('L') img.thumbnail((28, 28)) # 28*28に変換 img = np.array(img) # numpy arrayに変換 x_train[ "該当のindex" ] = img ``` 手順3で0にならなかった場合はエポックを増やす方法もありますが 手書きの`あ`の画像データを更に作って学習させる必要があるかもしれません ちなみに’あ’の画像データがご自分で準備する必要があります
退会済みユーザー

退会済みユーザー

2021/02/17 14:40 編集

書いて頂いたコードは、どの順番で、どのように書いていけば良いのでしょうか?syntaxエラーが出まくっていて・・・。オリジナル画像は0.jpgにしました、0の中が真っ黒の画像です。 以下、入力コマンド(python)と表示エラーです。 ```python pred = model.predict("0.jpg") np.argmax(pred) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'np' is not defined >>> mnist = tf.keras.datasets.mnist.load_data() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'tf' is not defined >>> train, test = mnist Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'mnist' is not defined >>> (x_train, y_train),(x_test, y_test) = mnist Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'mnist' is not defined >>> model.compile( ... optimizer=tf.keras.optimizers.Adam(), ... loss=tf.keras.losses.sparse_categorical_crossentropy, ... metrics=[tf.keras.metrics.sparse_categorical_accuracy] ... ) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'model' is not defined >>> model.fit(x_train, y_train, epochs=5)​ File "<stdin>", line 1 model.fit(x_train, y_train, epochs=5)​ ^ SyntaxError: invalid character in identifier ``` どうすればうまく行きますかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問