0

私のデータセットは以下のとおりです。意味がありません。 。ホットエンコードされたターゲット配列[0,1]、[1,0]を使用していくつかの結果を得ました(テストセットで〜83%の精度に達する)。これは私がターゲット配列をバイナリ形式[0]または1に変更し、categorical_crossentropyをバイナリクロスエントロピーに変更したことがどれほど愚かであるかを認識しています。検証精度が

このアプローチでは、私が使用している学習率に関係なく、検証精度は82.05%に止まり、トレーニングの精度は25.80%に止まります。もちろん、これは意味をなさないもので、テストセットの精度は約30%です。

なぜこのようなことが起こりますか?私はトレーニングデータとメタデータの両方をチェックしており、正しいものです。私は以下のコードを投稿します。

inp = Input(shape=input_shape) 
out = Conv2D(16, (5, 5),activation = 'relu', kernel_initializer='glorot_uniform', kernel_regularizer=regularizers.l2(0.01), padding='same')(inp) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Dropout(0.5)(out) 

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Dropout(0.5)(out) 

out = Conv2D(32, (3, 3),activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Dropout(0.5)(out) 

out = Conv2D(64, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Conv2D(64, (3, 3),activation = 'relu', kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 

out = Conv2D(128, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Conv2D(128, (3, 3),activation = 'relu', kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 

out = Conv2D(256, (3, 3),activation = 'relu', kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = Conv2D(256, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform',kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 
out = Conv2D(512, (3, 3), activation = 'relu',kernel_initializer='glorot_uniform', kernel_regularizer=regularizers.l2(0.01), padding='same')(out) 
out = MaxPooling2D(pool_size=(2, 2))(out) 

out = Flatten()(out) 
out = Dropout(0.5)(out) 
dense1 = Dense(1, activation="softmax")(out) 
model = Model(inputs = inp, outputs = dense1) 

そしてエポックは、次のようになります。

dense1 = Dense(1, activation="sigmoid")(out) 

のように、 Epochs

+0

last dense la yer 'activation = 'sigmoid'' – DJK

答えて

0

変更シグモイドするソフトマックスからあなたの最後の活性化と、あなたの学習率下げてみてください

model.compile(optimizer=Adam(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy']) 
関連する問題