как я могу получить результат, отличный от 0 и 1 классификации, keras

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

У меня есть моя модель, и когда я предсказываю свое изображение, я получаю такой результат, я знаю, что это классификатор, но мне нужен «процент», чтобы этот результат [0, 0, 0, 1]

и мне нужно что-то вроде этого

[.04, .1, .94, .07] и когда я использую argmax, у меня есть результат [3], но я не могу Я пробовал с predict(), predict_proba() и predict_classes(), но не сработал мой обучающий код:

 data_entrenamiento = './data/entrenamiento'
data_validacion = './data/validacion'

epocas=20
longitud, altura = 150, 150
batch_size = 32
pasos = 200
validation_steps = 50
filtrosConv1 = 32
filtrosConv2 = 64
tamano_filtro1 = (3, 3)
tamano_filtro2 = (2, 2)
tamano_pool = (2, 2)
clases = 3
lr = 0.0004

entrenamiento_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

entrenamiento_generador = entrenamiento_datagen.flow_from_directory(
data_entrenamiento,
target_size=(altura, longitud),
batch_size=batch_size,
class_mode='categorical')

validacion_generador = test_datagen.flow_from_directory(
data_validacion,
target_size=(altura, longitud),
batch_size=batch_size,
class_mode='categorical')

cnn = Sequential()
cnn.add(Convolution2D(filtrosConv1, tamano_filtro1, padding ="same",         input_shape=(longitud, altura, 3), activation='relu'))
cnn.add(MaxPooling2D(pool_size=tamano_pool))

cnn.add(Convolution2D(filtrosConv2, tamano_filtro2, padding ="same"))
cnn.add(MaxPooling2D(pool_size=tamano_pool))

cnn.add(Flatten())
cnn.add(Dense(256, activation='relu'))
cnn.add(Dropout(0.5))
cnn.add(Dense(clases, activation='softmax'))

cnn.compile(loss='categorical_crossentropy ',
        optimizer=optimizers.Adam(lr=lr),
        metrics=['accuracy'])

callbacks = [EarlyStopping(monitor='val_loss', patience=2),



cnn.fit_generator(
entrenamiento_generador,
steps_per_epoch=pasos,
epochs=epocas,
callbacks=callbacks,
validation_data=validacion_generador,
validation_steps=validation_steps)
  

и мой классификационный код:

 def predict(file):
x = load_img(file, target_size=(longitud, altura))
x = img_to_array(x)
x = np.expand_dims(x, axis=0)
array = cnn.predict(x,batch_size=32,verbose=1)
print(array)
result = array[0]
answer = np.argmax(result)
if answer == 0:
  print("pred: Perro")
elif answer == 1:
  print("pred: Gato")
elif answer == 2:
  print("pred: Gorila")

return answer
  

Я пробовал с помощью predict(), predict_proba() и predict_classes(), но не сработало

Комментарии:

1. Я не совсем понимаю ваш вопрос. Чего вы именно хотите?

2. Я хочу что-то подобное [.04, .1, .94, .07], и мои результаты представляют собой только целые числа [0,0,0,1]