2017-05-25 22 views
0

私はマルチラベル分類器を訓練しようとしました。出力層にシグモイドユニットを使用して、 "binary_crossentrpy"のロスを使用しました。現在の問題は、トレーニングとテストの結果が理想的であり、損失と精度の値が大きかったことです。しかし、model.predict()予測ラベルを使用した場合、出力は実際のラベル値と一致しません。どのようにそれを解決するコードを変更するには? トレーニングセットとテストセットの形状は(-1,1,300,300)、ターゲットラベルの形状は(-1、478)、合計478個です。 完全コード:マルチラベル分類用のケラスについて

import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten, Dropout 
from keras.optimizers import Adam 

X = np.load('./data/X_train.npy') 
y = np.load('./data/Y_train.npy') 
X_train, y_train = X[:2000], y[:2000] 
X_test, y_test = X[2000:], y[2000:] 

model = Sequential() 

model.add(Convolution2D(nb_filter=32, nb_row=5, nb_col=5, padding='same', input_shape=(1, 300, 300))) 
model.add(Activation('relu')) 

model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same')) 

model.add(Dropout(0.25)) 

model.add(Convolution2D(64, 5, 5, padding='same')) 
model.add(Activation('relu')) 

model.add(MaxPooling2D(pool_size=(2, 2), border_mode='same')) 

model.add(Dropout(0.25)) 

model.add(Flatten()) 
model.add(Dense(1024)) 
model.add(Activation('relu')) 

model.add(Dropout(0.5)) 

model.add(Dense(478)) 
model.add(Activation('sigmoid')) 

model.compile(optimizer=Adam(lr=1e-4), loss='binary_crossentropy', metrics=['accuracy']) 

print('Training ------------') 
model.fit(X_train, y_train, epochs=5, batch_size=300, validation_data=(X_test, y_test), verbose=1) 

model.save('model.h5') 

解決策を見つける手助けをしてもらえますか?ありがとう!

+0

これを今解決しますか? – Huo

答えて

0

しきい値に基づいて値をフィルタリングしようとしましたか?

pred = model.predict(x_test) 
pred[pred>=0.5] = 1 
pred[pred<0.5] = 0 
print(pred[0:5]) 
関連する問題