python - 针对 Python Keras/Tensorflow CNN 测试随机图像
问题描述
我已经创建了 CNN,并且正在尝试弄清楚如何针对它测试随机图像。我正在使用 Keras 和 Tensorflow。假设我想测试在这里找到的图像: https ://i.ytimg.com/vi/7I8OeQs7cQA/maxresdefault.jpg 。
我将如何保存模型,加载它然后针对它测试这个图像?这是我在网上找到的一些示例代码,说明了我的意思: https ://meta.stackexchange.com/questions/144665/hide-email-address-from-my-profile
非常感谢任何帮助,谢谢!
import os
import cv2
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display, Image
from keras.models import Sequential, load_model
from keras.layers import Conv2D, Flatten, MaxPooling2D, Input
from keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import models, layers
X = []
y = []
from sklearn.model_selection import train_test_split
labels = os.listdir(r'C:/Users/zF1bo/Desktop/natural_images')
labels
for label in labels:
path = r'C:/Users/zF1bo/Desktop/natural_images/{}/'.format(label)
img_data = os.listdir(path)
for image in img_data:
a = cv2.imread( path + image)
a = cv2.resize(a, (64, 64))
X.append(np.array(a.astype('float32')) / 255)
y.append(label)
buckets = []
for i in y:
if i == 'airplane':
buckets.append(0)
elif i == 'car':
buckets.append(1)
elif i == 'cat':
buckets.append(2)
elif i == 'dog':
buckets.append(3)
elif i == 'flower':
buckets.append(4)
elif i == 'fruit':
buckets.append(5)
elif i == 'motorbike':
buckets.append(6)
elif i == 'person':
buckets.append(7)
y = buckets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, \
random_state = 0)
model = models.Sequential()
model.add(layers.Conv2D(filters=32, kernel_size=(5,5), activation='relu', input_shape=(64,64,3)))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(8, activation='softmax'))
model.compile(optimizer='adam', loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])
y_train = np.array(y_train)
model.fit(X_train, y_train, batch_size=(256), epochs=25)
pred = model.predict(X_test)
diff = []
for i in pred:
diff.append(np.argmax(i))
from sklearn.metrics import accuracy_score
accuracy_score(diff,y_test)
解决方案
第 1 步:保存模型
model.save('model.h5')
第 2 步:加载模型
loaded_model = tensorflow.keras.models.load_model('model.h5')
第 3 步:通过 requests 库下载图片(答案来自:通过 urllib 和 python 下载图片):
import urllib.request
urllib.request.urlretrieve(url, filename)
否则,您可以应用与您发布的第一张图片相同的步骤。不要忘记expand_dims()
推荐阅读
- reactjs - 覆盖新路线时,React Native先前的路线会改变位置
- javascript - 如何在svelte中将参数传递给模态
- node.js - Node.JS Puppeteer:MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。(Heroku 部署)
- python - 差分时间序列和移动平均线
- flutter - SetState 不适用于 listview.builder
- javascript - 是浏览器 api 的承诺对象部分还是特定于 javascript
- lua - 如何显示模块完成信息 lua nvim?
- javascript - 在反应中删除待办事项列表中的项目
- perl - 按 REGEX 组将字符串拆分为 3
- html - 用于 HTML 名称输入验证的正则表达式不起作用