2022.09.14こんにちは、ヒガシです。今回もAIモデルに関するお話です。「精度が高いモデルを構築することはできたんだけど、実際に製品へ搭載するには計算コストが高すぎて載せられない。」なんてことは良くある話です。いうわけでこのページでは、構築済みのAIモデルを縮退化(つまり軽量化)したAIモデルを新たに構築する、という作業を実演してみようと思います。縮退化モデルを構築する際は、縮退化前のモデルを構築する際に使用したデータは使用できないことを前提に話を進めていきます。それではさっそくやっていきましょう。縮退化前のモデルを準備する縮退化モデル用のデータを生成する縮退化モデルを構築する縮退化前のモデルと縮退化後のモデルの精度比較おわりに縮退化前のモデルを準備する縮退化作業を実演するにあたって、まずは縮退化前のモデルがなければ話になりません。いうわけでまずはそれを構築しましょう。pddata_file='sample_data.csv'data=pd.read_csv(data_file).valuesXdata=data[:,:4]Ydata=data[:,-1]これでXdataに入力として4つのデータ、Ydataに出力として1つのデータが格納されています。※データの詳細は本筋から外れるので割愛しますが、適当なSIN波を合成したようなデータが入っています。left')plt.show()結果は以下の通りで問題なく学習が進みました。いうわけで、これで以下のようにDense500が3層あるモデルを構築することができました。今回はこのモデルだけを使って縮退化モデルを再構築してみようと思います。先述した通り、縮退化モデルを構築する際は縮退化前モデルを構築する際に使用したデータ(今回でいうXdata,Ydata)は使用できない前提で話を進めていきます。スポンサーリンク縮退化モデル用のデータを生成する先ほども述べたように、今回はベースとなるモデル(縮退化前)を構築する際に使用したデータ(今回でいうXdata,Ydata)は使用できない前提です。縮退化モデルを学習させる際はどうすればよいでしょうか?その答えは、縮退化前のモデルに入力データをいくつも流し込み、出てきた出力データと紐づけてデータを再生成するという手法です。要はすでにあるAIモデル(縮退化前)に新たにデータを生成させてやろう、という考えです。実際にそれをやってみます。※先ほどの続きなので縮退化前モデルは変数modelに格納されています。Ydata2.append(outputdata)Xdata2=np.array(Xdata2)Ydata2=np.array(Ydata2)上記コードでやっていることは1指定範囲内で入力データを作成21のデータを既存モデルに投入3投入した入力データ、出てきた出力データを保存という作業を1000回繰り返しています。Ydata2という変数に縮退化モデル用の学習データが格納されています。スポンサーリンク縮退化モデルを構築する事前準備はここまで。先ほど作成したデータを使って縮退化モデルを構築しましょう。以下のコードで構築します。optimizer=Adam(lr=0.001))model_shulink.summary()history=model_shulink.fit(Xdata2,Ydata2,batch_size=16,epochs=100,validation_split=0.2)ベースとなるモデルはDense500の3層でしたが、今回はDense20の2層まで縮退化してみました。これでmodel_shulinkに縮退化後のモデルが格納されています。先ほど構築したモデルの精度を確認してみましょう。やり方としては、縮退化モデルを構築する際に使用した入力データを、縮退化前のモデル、縮退化後のモデルそれぞれに流し込み、出てきた出力結果を比較し両者が一致していることを確認します。以下がそのコードです。base_out=model.predict(Xdata2)shuling_out=model_shulink.predict(Xdata2)plt.scatter(base_out,shuling_out)plt.ylabel('Origginal_Model_Output')plt.xlabel('Shulink_Model_Output')こいつを実行すると以下の結果が出力されました。問題なく縮退化前後で出力結果が一致していますね。スポンサーリンクおわりにというわけで今回は既存のAIモデルだけを使って、そのモデルの縮退化モデルを再構築する方法をご紹介しました。今回はそもそも簡単なデータを使っているので非常に高精度に再現できましたが、だいたいこうはうまくいかないので縮退化後の精度もよく確認しながら進めることをオススメします。仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。⇒興味をもった方は【ヒガサラ】で検索してみてください。確実にスキルアップできるはずです。最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。コピーヒガシをフォローするスポンサーリンクヒガシヒガサラblogスポンサーリンクpython【AI】MLPモデルの重み、バイアスをcsvファイルに出力する方法!こんにちは、ヒガシです。Perceptron)モデルから重みとバイアスを取得し、それらをcsvファイルに出力する方法をご紹介していきます。Python...エクセルVBA【AI】ニューラルネットワークの計算をエクセルで再現する方法こんにちは、ヒガシです。※今回の記事は、前回の続きの立ち位置です。前回記事を見ていない方はまずは前回記事から見ていただけると幸いです。【AI】サンプル画像の自作から画像分類CNNモデル構築までを実演!こんにちは、ヒガシです。このページでは、前回の記事にて作成した画像分類AIの構築練習用画像を用いて、実際の画像分類AIモデル(CNNモデル)を構築してみようと思います。この記事...python【AI】複数出力を持つモデルにshap適用!出力ごとに寄与度分析!こんにちは、ヒガシです。今回も前回に引き続きshapを使って遊んでみようと思います。前回の記事では、簡単な4入力、1出力のモデルにshapを適用し、各入力が出力に与える寄与度を...python【python-openCV】画像を畳み込み処理!内部の計算内容を実演!AIの画像認識なんかでよく聞く畳み込み処理。このページでは、こんな悩みを解決するためにある画像を指定した(3×3)のフィルターを使って実際の畳み込み...python【AI】活性化関数付MLPモデルの計算を行列計算で再現する方法!こんにちは、ヒガシです。前回の記事にて、学習済のAIモデルから重み&バイアスを取り出すことによって、ニューラルネットワーク内部の計算を行列計算のみで実施する方法をご紹介しました。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。ご指摘ありがとうございます。修正させていただきましました。【python-openCV】背景画像に別の画像を合成する方法!やぎ2023.05.29こんにちは。書く必要があると思います。【python-openCV】背景画像に別の画像を合成する方法!サトシ2023.05.11承知しました。アドバイス本当にありがとうございます。【VBA】大量のファイル名変更!指定したフォルダ内を一括操作!ヒガシ2023.05.11/はフォルダの階層が変わることを意味しますので使えません。substitute関数などを使って別文字に変換してから実行すると良いと思います。【VBA】大量のファイル名変更!指定したフォルダ内を一括操作!サトシ2023.05.10何度もすみません。/を使うと出来ないみたいです。2001-001-1/4とかにしたいのですが、ファイルが見つかりませんとかパスが無効ですとなります。検索タイトルとURLをコピーしました。