#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]