如何在深度学习神经网络中实现未知类?

时间:2020-02-27 04:56:37

标签: keras deep-learning

我正在进行多类有害生物分类。我有10类昆虫可以识别。但是项目要求还必须包括一个未知类,即,如果有任何输入不属于10个类中的任何一个,则模型应将其归类为``未知类''。 我无法定义这个未知的类。如果有人有任何想法,请帮助我。 不,我没有使用过“未知类”的任何示例。实际上,这是不可行的,因为有无限的事物可以超出我所拥有的10类,这可以被认为是“未知类”。下面是我的代码:

import pandas as pd
import numpy as np
import os
import keras
import matplotlib.pyplot as plt
from keras.layers import Dense,GlobalAveragePooling2D
from keras.applications import MobileNet, ResNet50, InceptionResNetV2
from keras.preprocessing import image
from keras.applications.mobilenet import preprocess_input
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Model
from keras.optimizers import Adam

base_model=ResNet50(weights='imagenet',include_top=False)

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x)
x=Dense(1024,activation='relu')(x)
x=Dense(512,activation='relu')(x) 
preds=Dense(10,activation='softmax')(x)

model=Model(inputs=base_model.input,outputs=preds)
class_names = ["acronicta_tridens_caterpillar", "helicoverpa_A",
"helicoverpa_B","helicoverpa_C","helicoverpa_D","helicoverpa_E",
"helicoverpa_F","helicoverpa_H","horned_caterpillar",
"Thistle_Caterpillars"]

for layer in model.layers[:-4]:
    layer.trainable=False
for layer in model.layers[-4:]:
    layer.trainable=True

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input) 
#included in our dependencies

train_generator=train_datagen.flow_from_directory('./project/', # this is 
where you specify the path to the main data folder
                                             target_size=(224,224),
                                             color_mode='rgb',
                                             batch_size=32,
                                             class_mode='categorical',
                                             shuffle=True)

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


step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
               steps_per_epoch=step_size_train,
               epochs=5)

fn =  "insects.h5"
model.save_weights(fn)

import os
fn =  "insects.h5"
cwd = os.getcwd()
fn2 = cwd+"\\"+fn
print(fn2)
model.load_weights(fn2)

import cv2
gray = cv2.imread("insect1.jpg", cv2.IMREAD_COLOR)
print(gray.shape)
gray = cv2.resize(gray,(224, 224))
print(gray.shape)
pr = model.predict(gray.reshape(1, 224, 224, 3))
pr = model.predict(gray)
print(pr)
for i in range(len(pr)):
    z=[np.argmax(pr[i])]
    print("pr=%s, Predicted=%s" % (pr, z))
import matplotlib.pyplot as plt
plt.imshow(gray, cmap=plt.get_cmap("Spectral"))
cv2.imshow("", gray)
cv2.waitKey(0)

class_names = ["acronicta_tridens_caterpillar", "helicoverpa_A", 
"helicoverpa_B","helicoverpa_C","helicoverpa_D","helicoverpa_E",
"helicoverpa_F","helicoverpa_H","horned_caterpillar",
"Thistle_Caterpillars"]
o=class_names[z[0]]
print(o)

0 个答案:

没有答案