0

全て。

転移学習を使用して、独自のサンプルに基づいて新しいモデルを構築しています。学習フレームワークは Keras 2.0+ です。このページを参照してコードを変更しました: クラスの新しいセットで InceptionV3 を微調整します https://keras.io/applications/

トレーニングステップでは何も問題はありません。テスト セットを使用してモデルをテストすると、クラスが異なるにもかかわらず、すべての画像で同じ予測クラスが得られます。例:

>>> print(preds)
[[0.0000000e+00 4.5558951e-38 0.0000000e+00 0.0000000e+00 6.3798614e-36
  8.4623914e-22 1.0000000e+00 1.0636564e-11]]
>>> print(pred_classes)
6

8 クラスの写真を 10 枚テストしましたが、すべてクラス 6 でした。

何か提案はありますか?</p>

トレーニング コード:

from keras.applications.inception_v3 import InceptionV3, preprocess_input
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator

base_model = InceptionV3(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(8, activation='softmax')(x)

model = Model(inputs=base_model.input, outputs=predictions)

for layer in base_model.layers:
    layer.trainable = False

model.compile(optimizer='rmsprop', loss='categorical_crossentropy',metrics=['accuracy'])

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input)
train_generator=train_datagen.flow_from_directory('./TranningSet',
                                                 target_size=(224,224),
                                                 color_mode='rgb',
                                                 batch_size=32,
                                                 class_mode='categorical',
                                                 shuffle=True)

step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                   epochs=100,
                   use_multiprocessing=True)

最終列車の精度は少し低いですが、70%程度です

50/50 [==============================] - 297s 6s/step - loss: 4.2306 - acc: 0.7040
Epoch 99/100
50/50 [==============================] - 303s 6s/step - loss: 3.7681 - acc: 0.7387
Epoch 100/100
50/50 [==============================] - 293s 6s/step - loss: 3.7569 - acc: 0.7443
<keras.callbacks.History object at 0x7fd931756bd0>
>>>

予測コード:

import keras
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
from keras.models import Model
import numpy as np
from keras.models import load_model
from keras.applications.inception_v3 import preprocess_input

model = load_model('/root/AIdetection/Keras/V6.5/20181217_V6.5.h5')


from keras.preprocessing import image
img =image.load_img('/root/AIdetection/Keras/V6.5/TestSet/Healthy50/20181026.06.JPG', target_size=(224, 224))
x = image.img_to_array(img)
x *= (255.0/x.max())
image = np.expand_dims(x, axis = 0)
image = preprocess_input(image)
preds = model.predict(image)
pred_classes = np.argmax(preds)
print(preds)
print(pred_classes)
4

1 に答える 1

0

トレーニング データはバランスが取れていますか? トレーニング前にシャッフルしていますか? つまり、ほとんどのトレーニング データがクラス 6 であり、毎回単純に 6 を予測するように学習している可能性はありますか?

また、テスト セットがトレーニング セットと同じ形式であることも確認してください。トレーニング データをモデルに渡す前に何らかの画像処理を行っていますか?

于 2018-12-17T13:53:23.573 に答える