現在MATLABでRNNモデルを作成したものをPythonに移行しています.
具体的には音のスペクトログラムデータを学習分析するものであり,現在はPythonでRNNモデルの作成を行っています.
しかし,データ学習し終えた後にテストデータで分類評価を行う際に,2値分類において予測値がすべて同一になってしまいます.
Python
1import scipy 2from keras.optimizers import RMSprop 3from keras import Sequential, layers 4import numpy as np 5from scipy.io import whosmat 6 7## matファイルからスペクトログラムを取得 8matfilename='trainfile.mat' 9matfile = scipy.io.loadmat(matfilename, mat_dtype=True, squeeze_me=False) 10matinfo = whosmat(matfilename) 11spec=matfile["XX"] # pythonの変数を格納(shape:(86400,31,69),dtype:float32) 12 13## RNN学習用正規化処理 14spectmp=np.ravel(spec) # 1次元化 15specmean=np.mean(spectmp) # 平均 16specstd=np.std(spectmp,ddof=1) # 標準偏差(n-1法) 17spectrain=np.reshape((spectmp-specmean)/specstd,[matinfo[0][1][0],-1,1])# 平均化処理を行い,(86400,31*69)の次元で戻す 18 19## ラベル付け 20labeltrain=# shape:(86400,2), dtype:float32の形式で0,1が入力されている 21 22## モデルの定義 23model = Sequential() 24model.add(layers.GRU(100, input_shape=[2139,1]))# input_shapeは31*69=2139となっている 25model.add(layers.Dense(2, activation='sigmoid')) 26 27model.compile(optimizer=RMSprop(), loss='binary_crossentropy', metrics=['accuracy']) 28model.fit(spectrain, labeltrain, batch_size=200, epochs=2, verbose=1) 29model.save('model.h5') 30 31# テスト 32matfilename='testfile.mat' 33matfiletest = scipy.io.loadmat(matfilename, mat_dtype=True, squeeze_me=False) 34matinfotest = whosmat(matfilename) 35spectmp2=matfiletest["XXX"]# pythonの変数を格納(shape:(3600,31,69),dtype:float32) 36spectest=np.reshape((np.ravel(spectmp2)-specmean)/specstd,[matinfotest[0][1][0],-1,1])# 平均化処理を行い,(3600,31*69)の次元で戻す 37new_pos = model.predict(spectest, batch_size=200, verbose=1)
new_posのところでの分類結果が一方のラベルに偏ってしまって困っています.
Python:3.7 by Anaconda
Keras:2.2.4
numpy:1.18.1
scipy:1.3.2
あなたの回答
tips
プレビュー