开发手册 欢迎您!
软件开发者资料库

使用TensorFlow进行图像识别

使用TensorFlow进行图像识别 - 从简单和简单的步骤学习TensorFlow,从基本到高级概念,包括简介,安装,理解人工智能,数学基础,机器学习和深度学习,基础知识,卷积神经网络,递归神经网络,TensorBoard可视化,单词嵌入,单层感知器,线性回归,TFLearn及其安装,CNN和RNN差异,Keras,分布式计算,TensorFlow导出,多层感知器学习,感知器隐藏层,TensorFlow中的优化器,XOR实现,梯度下降优化,形成图,使用TensorFlow的图像识别,神经网络训练的建议。

TensorFlow包含图像识别的特殊功能,这些图像存储在特定文件夹中.对于相对相同的图像,出于安全目的,很容易实现此逻辑.

图像识别代码实现的文件夹结构如下所示 :

图像识别

dataset_image包含需要加载的相关图像.我们将专注于图像识别,其中定义了我们的徽标.图像加载了"load_data.py"脚本,这有助于记录其中的各种图像识别模块.

import picklefrom sklearn.model_selection import train_test_splitfrom scipy import miscimport numpy as npimport oslabel = os.listdir("dataset_image")label = label[1:]dataset = []for image_label in label:   images = os.listdir("dataset_image/"+image_label)      for image in images:      img = misc.imread("dataset_image/"+image_label+"/"+image)      img = misc.imresize(img, (64, 64))      dataset.append((img,image_label))X = []Y = []for input,image_label in dataset:   X.append(input)   Y.append(label.index(image_label))X = np.array(X)Y = np.array(Y)X_train,y_train, = X,Ydata_set = (X_train,y_train)save_label = open("int_to_word_out.pickle","wb")pickle.dump(label, save_label)save_label.close()

培训图像有助于将可识别的模式存储在指定的文件夹中.

import numpyimport matplotlib.pyplot as pltfrom keras.layers import Dropoutfrom keras.layers import Flattenfrom keras.constraints import maxnormfrom keras.optimizers import SGDfrom keras.layers import Conv2Dfrom keras.layers.convolutional import MaxPooling2Dfrom keras.utils import np_utilsfrom keras import backend as Kimport load_datafrom keras.models import Sequentialfrom keras.layers import Denseimport kerasK.set_image_dim_ordering('tf')# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)# load data(X_train,y_train) = load_data.data_set# normalize inputs from 0-255 to 0.0-1.0X_train = X_train.astype('float32')#X_test = X_test.astype('float32')X_train = X_train / 255.0#X_test = X_test / 255.0# one hot encode outputsy_train = np_utils.to_categorical(y_train)#y_test = np_utils.to_categorical(y_test)num_classes = y_train.shape[1]# Create the modelmodel = Sequential()model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), padding = 'same',    activation = 'relu', kernel_constraint = maxnorm(3)))model.add(Dropout(0.2))model.add(Conv2D(32, (3, 3), activation = 'relu', padding = 'same',    kernel_constraint = maxnorm(3)))model.add(MaxPooling2D(pool_size = (2, 2)))model.add(Flatten())model.add(Dense(512, activation = 'relu', kernel_constraint = maxnorm(3)))model.add(Dropout(0.5))model.add(Dense(num_classes, activation = 'softmax'))# Compile modelepochs = 10lrate = 0.01decay = lrate/epochssgd = SGD(lr = lrate, momentum = 0.9, decay = decay, nesterov = False)model.compile(loss = 'categorical_crossentropy', optimizer = sgd, metrics = ['accuracy'])print(model.summary())#callbacks = [keras.callbacks.EarlyStopping(   monitor = 'val_loss', min_delta = 0, patience = 0, verbose = 0, mode = 'auto')]callbacks = [keras.callbacks.TensorBoard(log_dir='./logs',    histogram_freq = 0, batch_size = 32, write_graph = True, write_grads = False,    write_images = True, embeddings_freq = 0, embeddings_layer_names = None,    embeddings_metadata = None)]# Fit the modelmodel.fit(X_train, y_train, epochs = epochs,    batch_size = 32,shuffle = True,callbacks = callbacks)# Final evaluation of the modelscores = model.evaluate(X_train, y_train, verbose = 0)print("Accuracy: %.2f%%" % (scores[1]*100))# serialize model to JSONxmodel_json = model.to_json()with open("model_face.json", "w") as json_file:   json_file.write(model_json)# serialize weights to HDF5model.save_weights("model_face.h5")print("Saved model to disk")

上面的代码行生成如下所示的输出 :

可识别的模式


可识别的模式输出