我有一個 CNN 模型并使用它來預測影像的類別:
model = load_model(modelName)
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
img = image.load_img(filename1, target_size=(img_width, img_height), color_mode="grayscale")
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
predict = model.predict(images, batch_size=8)
classes = np.argmax(predict, axis=1)
print(classes)
輸出:[25]。我有 36 個檔案夾,每個檔案夾都有不同的名稱 ( https://imgur.com/a/rJdEmfJ ),里面全是我用來訓練 CNN 的影像,但我沒有在預處理中標記它們。(class_names 保留為注釋,如下所示):
ds_train = tf.keras.preprocessing.image_dataset_from_directory(
directory = 'D:/dataset2/',
labels = 'inferred',
label_mode = 'int',
# class_names=['0', '1', '2', '3', ...]
color_mode = 'grayscale',
batch_size = batchSize,
image_size = (imgHeight, imgWidth),
shuffle = True,
seed = 123,
validation_split = 0.2,
subset = "training",
)
我怎么知道哪個類是哪個類,它是以某種方式對檔案夾進行排序還是什么?
uj5u.com熱心網友回復:
如果您設定 labels = 'inferred' 并且不指定 class_names,則類的順序是字母數字。如果您指定 class_names,則類的順序將是 class_names 串列的順序。例如,我有一個包含 30 個子目錄的目錄,每個子目錄都包含樂器的影像檔案。在下面的代碼中,train_data 是一個未指定 class_names 的資料集,因此順序將是字母數字。資料集 reverse_train_data 是通過首先列出主目錄的內容來創建的,然后使用以 reverse=True 排序的 python 函式來獲取反轉的字母數字串列,然后將 class_names 設定為等于該反轉串列。代碼中的列印輸出顯示了每種情況下類的結果順序。
train_dir=r'C:\Temp\instruments\train'
classlist=os.listdir(train_dir)# Note per python documentation list_dir returns an arbitrary ordered list
sorted_classlist=sorted(classlist, reverse=True) # this is a list in reverse alphanumeric order
train_data=tf.keras.utils.image_dataset_from_directory(train_dir, labels='inferred', label_mode='categorical', class_names=None,
color_mode='rgb', batch_size=32, image_size=(224,224), shuffle=False,
seed=None, validation_split=None, subset=None, interpolation='bilinear',
follow_links=False, crop_to_aspect_ratio=False)
reverse_train_data=tf.keras.utils.image_dataset_from_directory(train_dir, labels='inferred', label_mode='categorical', class_names=sorted_classlist,
color_mode='rgb', batch_size=32, image_size=(224,224), shuffle=False,
seed=None, validation_split=None, subset=None, interpolation='bilinear',
follow_links=False, crop_to_aspect_ratio=False)
class_names=train_data.class_names
reverse_class_names=reverse_train_data.class_names
print('{0:^25s}{1:^25s}{2:^25s}'.format('CLASS NAMES', 'REVERSE CLASS NAMES', 'SORTED CLASS LIST'))
for i in range (len(class_names)):
print('{0:^25s}{1:^25s}{2:^25s}'.format(class_names[i], reverse_class_names[i], sorted_classlist[i]))
列印結果如下圖
Found 4793 files belonging to 30 classes.
Found 4793 files belonging to 30 classes.
CLASS NAMES REVERSE CLASS NAMES SORTED CLASS LIST
Didgeridoo violin violin
Tambourine tuba tuba
Xylophone trumpet trumpet
acordian trombone trombone
alphorn steel drum steel drum
bagpipes sitar sitar
banjo saxaphone saxaphone
bongo drum piano piano
casaba ocarina ocarina
castanets marakas marakas
clarinet harp harp
clavichord harmonica harmonica
concertina guitar guitar
drums guiro guiro
dulcimer flute flute
flute dulcimer dulcimer
guiro drums drums
guitar concertina concertina
harmonica clavichord clavichord
harp clarinet clarinet
marakas castanets castanets
ocarina casaba casaba
piano bongo drum bongo drum
saxaphone banjo banjo
sitar bagpipes bagpipes
steel drum alphorn alphorn
trombone acordian acordian
trumpet Xylophone Xylophone
tuba Tambourine Tambourine
violin Didgeridoo Didgeridoo
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467677.html
標籤:Python 张量流 机器学习 神经网络 卷积神经网络
上一篇:影片SVG邊框影像不尊重邊框半徑
下一篇:將RNN轉換為biRNN
