Python 3.x 如何使用tensorflow';s图像分类教程,用于对原始训练或验证数据集中未显示的图像进行分类?
TensorFlow有,我可以运行 然后,我为使用模型定义此函数:Python 3.x 如何使用tensorflow';s图像分类教程,用于对原始训练或验证数据集中未显示的图像进行分类?,python-3.x,tensorflow,keras,tensorflow2.0,Python 3.x,Tensorflow,Keras,Tensorflow2.0,TensorFlow有,我可以运行 然后,我为使用模型定义此函数: def predict1(model,img): img = img.resize((150,150)) im = np.array(img) im = im.reshape(-1,np.shape(im)[0],np.shape(im)[1],3) # resize for 'batch' preds = model.predict(im) # predict retu
def predict1(model,img):
img = img.resize((150,150))
im = np.array(img)
im = im.reshape(-1,np.shape(im)[0],np.shape(im)[1],3) # resize for 'batch'
preds = model.predict(im) # predict
return preds
然后实际使用它:
img = Image.open('MYIMAGE.jpg')
predict1(model,img)
输出为:
array([[3415.0505]], dtype=float32)
我注意到,当一个正数(这里是3415.0505)对应于一个类别时,一个负数对应于另一个类别(我在几次尝试后意识到这一点)。这很好,我可以编写一个函数,根据返回字符串的符号返回字符串'dog'
或'cat'
然而,我认为我没有抓住重点。有什么更好的方法可以真正获得'dog'
或'cat'
预测
如果有许多类别,我基于符号的方法将失败。我将使用这个分类器来分类到许多类别,这就是为什么我需要一个更好的方法。这是基于您尝试做的教程 我对教程中的代码做了一些修改,因为您尝试的是分类,而不是二进制分类。
为了演示
对于列车_gen:
train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='categorical') // change from binary to categorical
对于验证,请执行以下操作:
val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
directory=validation_dir,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='categorical') // changed from binary to categorical
我还更新了输出层,因为它是分类的
model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(2) #Changed to 2 since you wanted a multiple output e.g.[ 0.333, -0.1333]
])
在预测部分,我使用了tf.math.argmax方法,它返回预测中最高值的索引
listofLabels = ['dog', 'cat']
x = model.predict(sample_training_images)
labels = tf.math.argmax(x, axis = 1)
print(labels)
for label in labels:
print(listofLabels[label])