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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

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

Q&A

解決済

1回答

752閲覧

TensorFlowとAndroid Studioで画像分類を利用したスマートフォンアプリが作りたい

baruterute

総合スコア9

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

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

0グッド

0クリップ

投稿2020/02/02 06:58

リンク内容
こちらの質問の続きのようなものなのですが

現在
リンク内容
こちらのサイトを参考にさせていただきながらTensorFlowを用いてAIに画像分類の機械学習を行い、それをAndroid StudioでAndroidアプリにしようと挑戦しています。

最上部のリンク内容の質問のおかげでMy DriveへのマウントとMy Drive内にあるimagesと言う名前のフォルダ内の画像データの読み込みはうまく進めることができました。

しかし、参考にさせていただいたQiitaの記事の
「Android Studioでの実装を考慮してモデルの形を微修正してモデルをトレーニング」と言う部分が上手く実行できず困っています

記事の方では
「ソースコードのこの部分

このあと以下のコードセルまでを順次実行するとモデルのトレーニングができる」

history = model.fit_generator( train_data_gen, steps_per_epoch=total_train // batch_size, epochs=epochs, validation_data=val_data_gen, validation_steps=total_val // batch_size )

とあるのですが、これをどうすれば良いのかがわかりません。

リンク内容
上記リンク先で実行しているのですが

epochs = 25 steps_per_epoch = train_generator.n // batch_size validation_steps = validation_generator.n // batch_size history = model.fit_generator(train_generator, steps_per_epoch = steps_per_epoch, epochs=epochs, workers=4, validation_data=validation_generator, validation_steps=validation_steps)

この部分を丸ごと上記の

history = model.fit_generator( train_data_gen, steps_per_epoch=total_train // batch_size, epochs=epochs, validation_data=val_data_gen, validation_steps=total_val // batch_size )

に書き換えているのですが

--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-16-01c6f78f4d4f> in <module>() 1 history = model.fit_generator( ----> 2 train_data_gen, 3 steps_per_epoch=total_train // batch_size, 4 epochs=epochs, 5 validation_data=val_data_gen, NameError: name 'train_data_gen' is not defined

このようなエラーが出てしまっています。

また、参考のソースコードだと下記の画像のように
イメージ説明

base_dir = '/content/drive保存したフォルダのパス'

を実行したのち

train_dir = os.path.join(base_dir, 'train') validation_dir = os.path.join(base_dir, 'val')

を実行すると

Total training L1 images: 152 Total training L4 images: 246 Total training L6 images: 150 Total validation L1 images: 60 Total validation L4 images: 60 Total validation L6 images: 60 /content/drive/My Drive/Gcolab/images/absLeveL/test/gray/train /content/drive/My Drive/Gcolab/images/absLeveL/test/gray/val

のように結果が返ってきているのですが

私の場合下記画像のように実行しても何も返ってきていない状態になっています
イメージ説明

最初のエラーと一緒に解決策がわかる方いらっしゃいましたら教えていただけると幸いです。

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

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

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

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

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

mistn

2020/02/03 12:09

参考にしているQiitaの記事とGoogle Colabに書かれているコードが一致していないように見えます。 書き換えた部分をもとに戻して実行してみてもらえませんか?
baruterute

2020/02/03 12:42

そのまま変えずに実行したのですが WARNING:tensorflow:From <ipython-input-15-d07fab551656>:10: Model.fit_generator (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version. Instructions for updating: Please use Model.fit, which supports generators. WARNING:tensorflow:sample_weight modes were coerced from ... to ['...'] WARNING:tensorflow:sample_weight modes were coerced from ... to ['...'] Train for 144 steps, validate for 7 steps Epoch 1/25 1/144 [..............................] - ETA: 1:05:57 --------------------------------------------------------------------------- InvalidArgumentError Traceback (most recent call last) <ipython-input-15-d07fab551656> in <module>() 8 workers=4, 9 validation_data=validation_generator, ---> 10 validation_steps=validation_steps) 13 frames /usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value) InvalidArgumentError: Incompatible shapes: [64,50] vs. [64,3] [[node metrics/accuracy/Equal (defined at <ipython-input-15-d07fab551656>:10) ]] [Op:__inference_distributed_function_17082] Function call stack: distributed_function というエラーコードが出てしまいました
mistn

2020/02/03 14:30

確認したいのですが分類を行いたいクラス数は3種類ですか? もしかして50種類だったりします?
baruterute

2020/02/03 15:35

すみません、3種類ではなく おっしゃる通り50種類あります
guest

回答1

0

ベストアンサー

Google Colab上のコードに以下のものがあると思います。

python

1model = tf.keras.Sequential([ 2 base_model, 3 tf.keras.layers.Conv2D(32, 3, activation='relu'), 4 tf.keras.layers.Dropout(0.2), 5 tf.keras.layers.GlobalAveragePooling2D(), 6 tf.keras.layers.Dense(3, activation='softmax') 7])

このコードの tf.keras.layers.Dense(3, activation='softmax') となっている部分を tf.keras.layers.Dense(50, activation='softmax') に変更してみてください。
3を50に変更していますが、この数値はクラス数と同じ値になるようにしてください。

投稿2020/02/03 16:06

mistn

総合スコア1191

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

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

baruterute

2020/02/04 01:37

ありがとうございます、50に変更したところモデルのトレーニングが始まったのですが 参考サイトのAndroid Studioでの実装を考慮してモデルの形を微修正してモデルをトレーニングという項目の history = model.fit_generator( train_data_gen, steps_per_epoch=total_train // batch_size, epochs=epochs, validation_data=val_data_gen, validation_steps=total_val // batch_size ) このコードを私は結局使用していないのですがこれはどういう意味のコードなのでしょうか
mistn

2020/02/04 02:52

私はQiitaの記事を書いた本人ではないので確実なことは言えません。 ですが、どちらもfit_generatorメソッドを使っているのでやってることは同じだと思います。 ただ引数として渡している値が違ったりしていますね。おそらく記載ミスでしょう。
baruterute

2020/02/04 04:09

なるほど、ありがとうございます
baruterute

2020/02/04 04:52 編集

``` saved_model_dir = base_dir+'保存したい場所' tf.saved_model.save(model, saved_model_dir) converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) tflite_model = converter.convert() with open(base_dir+'モデルの名前.tflite', 'wb') as f: f.write(tflite_model) ``` を参考サイトのように二つに分けて実行したのですが ``` saved_model_dir = base_dir+'保存したい場所' ←私は保存したい場所の名前をweedにしました tf.saved_model.save(model, saved_model_dir) ``` は正しく実行でき、My Drive上にimagesweedというフォルダができ 何も入っていないassetsフォルダと3つの何かが入ったvariablesフォルダと saved_model.pbというものが作成されました ここでTFLiteに変換するという ``` converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) tflite_model = converter.convert() with open(base_dir+'モデルの名前.tflite', 'wb') as f: f.write(tflite_model) ``` こちらのコードを実行したのですが モデルの名前を何に設定したら良いのかわからず色々試したのですが ``` NameError Traceback (most recent call last) <ipython-input-31-17b42921e1b9> in <module>() 2 tflite_model = converter.convert() 3 ----> 4 with open(base_dir+saved_model.tflite, wb) as f: 5 f.write(tflite_model) NameError: name 'saved_model' is not defined ``` 名前がないというようなエラーが出てしまっています
mistn

2020/02/04 06:49 編集

モデルの名前は何というファイル名で保存するかということなのでなんでも大丈夫だと思います。 なぜエラーが出てしまうのかというと変数になってしまっているからです。 'saved_model.tflite' のようにして文字列にしてください。
baruterute

2020/02/04 07:55

勘違いして''を外して実行してしまっていました 文字列にして再度実行して見ます、ありがとうございます
baruterute

2020/02/05 12:41

解決済みの質問に再びコメントすみません、どうやったかは覚えていないのですが、なぜか1度目はtfliteに変換されたのですが 2度目以降 converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) tflite_model = converter.convert() with open(base_dir+'TFL_model'.tflite', 'wb') as f: f.write(tflite_model) 同じようにソースコードを上から実行し直して別のものでLiteに変換しようとしたのですが モデルの名前を何にしても File "<ipython-input-18-d3f29fde4f7d>", line 4 with open(base_dir+'TFL_model'.tflite', 'wb') as f: ^ SyntaxError: invalid syntax このような無効な構文というエラーが出てしまいます。
mistn

2020/02/05 13:39

新たに質問しているようなのでここでの回答は控えさせてもらいます。
baruterute

2020/02/05 14:01

失礼しました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問