基於keras的影象多分類-flower
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten
from keras.layers.core import Dense
from keras import backend as K
class LeNet:
@staticmethod
def build(width, height, depth, classes):
model = Sequential()
inputShape = (height, width, depth)
# using "channels first",(樣本數,通道數,行或高,列或寬)通道在前,修改引數位置
if K.image_data_format() == "channels_first":
inputShape = (depth, height, width)
"""
CONV => RELU => POOL layers
CONV => RELU => POOL layers
FC => RELU layers
softmax
"""
model.add(Conv2D(20, (5, 5), padding="same", input_shape=inputShape,name='Conv_1'))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(50, (5, 5), padding="same",name='Conv_2'))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size= (2, 2), strides=(2, 2)))
# first (and only) set of FC => RELU layers
model.add(Flatten())
model.add(Dense(500,name='Dense_1'))
model.add(Activation("relu"))
# softmax classifier
model.add(Dense(classes,name='Dense_2'))
model.add(Activation("softmax"))
# return the constructed network architecture
return model
二、定義訓練模型 train_network.py
# set the matplotlib backend so figures can be saved in the background
import matplotlib
matplotlib.use("Agg")
# import the necessary packages
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from sklearn.model_selection import train_test_split
from keras.preprocessing.image import img_to_array
from keras.utils import to_categorical
from pyimagesearch.lenet import LeNet
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import random
import cv2
import os
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", type=str, default="training_set" ,
help="path to input dataset")
ap.add_argument("-m", "--model", type=str, default="trained_model" ,
help="path to output model")
ap.add_argument("-p", "--plot", type=str, default="plot.png" ,
help="path to output loss/accuracy plot")
args = vars(ap.parse_args())
EPOCHS = 25
INIT_LR = 1e-3
BS = 32
data = []
labels = []
dir_labels = ()
num_class = 0
# finding the labels
print("[INFO] Finding Labels...")
for file in os.listdir(args["dataset"]) :
temp_tuple=(file,'null')
dir_labels=dir_labels+temp_tuple
dir_labels=dir_labels[:-1]
#print(dir_labels)
num_class=num_class+1
#print(num_class)
# grab the image paths and randomly shuffle them
print("[INFO] Loading Images...")
imagePaths = sorted(list(paths.list_images(args["dataset"])))
random.seed(42)
random.shuffle(imagePaths)
for imagePath in imagePaths:
image = cv2.imread(imagePath)
image = cv2.resize(image, (28, 28))
image = img_to_array(image)
data.append(image)
label = imagePath.split(os.path.sep)[-2]
for i in range(num_class) :
if label == dir_labels[i] :
label = i
labels.append(label)
data = np.array(data, dtype="float") / 255.0
labels = np.array(labels)
(trainX, testX, trainY, testY) = train_test_split(data,labels, test_size=0.25, random_state=42)
trainY = to_categorical(trainY, num_classes=num_class)
testY = to_categorical(testY, num_classes=num_class)
aug = ImageDataGenerator(rotation_range=30, width_shift_range=0.1,
height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
horizontal_flip=True, fill_mode="nearest")
print("[INFO] Compiling Model...")
model = LeNet.build(width=28, height=28, depth=3, classes=num_class)
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="binary_crossentropy", optimizer=opt,
metrics=["accuracy"])
print("[INFO] Training Network...")
H = model.fit_generator(aug.flow(trainX, trainY, batch_size=BS),
validation_data=(testX, testY), steps_per_epoch=len(trainX) // BS,
epochs=EPOCHS, verbose=1 )
print("[INFO] Saving Model...")
model_base=args["model"]+'.h5'
model.save(model_base)
# plot the training loss and accuracy
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0,EPOCHS), H.history["loss"], label="train_loss")
plt.plot(np.arange(0,EPOCHS), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0,EPOCHS), H.history["acc"], label="train_acc")
plt.plot(np.arange(0,EPOCHS), H.history["val_acc"], label="val_acc")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig(args["plot"])
print("[INFO] Completed...")
三、定義預測模型
# import the necessary packages
from keras.preprocessing.image import img_to_array
from keras.models import load_model
import numpy as np
import argparse
import imutils
import cv2
import os
import sys
# initialising
dir_labels=()
dir_predict=()
num_class=0
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", required=False, default="training_set",
help="path to input dataset")
ap.add_argument("-m", "--model", required=False, default="trained_model",
help="path to trained model model")
ap.add_argument("-i", "--image", required=True,
help="path to input image")
args = vars(ap.parse_args())
#findings the labels
for file in os.listdir(args["dataset"]) :
temp_tuple=(file,'null')
dir_labels=dir_labels+temp_tuple
dir_labels=dir_labels[:-1]
num_class=num_class+1
print("[INFO] Labels are ",dir_labels)
# load the image
print("[INFO] Loading Image...")
try :
image = cv2.imread(args["image"])
orig = image.copy()
except AttributeError :
print("[INFO] Error in the test image... ")
print('[INFO] Exiting...')
sys.exit()
# pre-process the image for classification
image = cv2.resize(image, (28, 28))
image = image.astype("float") / 255.0
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
# load the trained convolutional neural network
print("[INFO] Loading Network...")
model_base=args["model"]+'.h5'
model = load_model(model_base)
# classify the input image
dir_predict = model.predict(image)[0]
print(dir_labels)
print(dir_predict)
for i in range(num_class) :
var = 0
for j in range(num_class) :
if(dir_predict[i]>=dir_predict[j]) :
var=var+1
if(var==num_class) :
label=dir_labels[i]
proba=dir_predict[i]
elif(var==num_class-1) :
label2=dir_labels[i]
proba2=dir_predict[i]
label = "{}: {:.2f}%".format(label, proba * 100)
# draw the label on the image
output = imutils.resize(orig, width=400)
cv2.putText(output, label, (10, 25), cv2.FONT_HERSHEY_SIMPLEX,
0.7, (0, 255, 0), 2)
# show and save the output image
cv2.imshow("Output", output)
cv2.imwrite("Output.png",output)
cv2.waitKey(0) #Press any key to exit the output image
print('[INFO] Exiting...')
資料集下載地址:
執行命令如下:
python train_network.py --dataset training_set --model trained_model --plot plo
輸出:
Using TensorFlow backend.
[INFO] Finding Labels...
[INFO] Loading Images...
[INFO] Compiling Model...
[INFO] Training Network...
Epoch 1/25
2018-10-30 16:25:45.234853: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
101/101 [==============================] - 18s 175ms/step - loss: 0.4371 - acc: 0.8043 - val_loss: 0.4090 - val_acc: 0.8098
Epoch 2/25
101/101 [==============================] - 13s 128ms/step - loss: 0.3919 - acc: 0.8224 - val_loss: 0.3658 - val_acc: 0.8415
Epoch 3/25
101/101 [==============================] - 12s 119ms/step - loss: 0.3714 - acc: 0.8333 - val_loss: 0.3616 - val_acc: 0.8515
Epoch 4/25
101/101 [==============================] - 12s 121ms/step - loss: 0.3661 - acc: 0.8352 - val_loss: 0.3442 - val_acc: 0.8547
Epoch 5/25
101/101 [==============================] - 14s 140ms/step - loss: 0.3393 - acc: 0.8486 - val_loss: 0.3250 - val_acc: 0.8636
Epoch 6/25
101/101 [==============================] - 15s 144ms/step - loss: 0.3274 - acc: 0.8575 - val_loss: 0.3387 - val_acc: 0.8528
Epoch 7/25
101/101 [==============================] - 14s 134ms/step - loss: 0.3270 - acc: 0.8564 - val_loss: 0.3232 - val_acc: 0.8614
Epoch 8/25
101/101 [==============================] - 15s 145ms/step - loss: 0.3192 - acc: 0.8626 - val_loss: 0.3176 - val_acc: 0.8627
Epoch 9/25
101/101 [==============================] - 14s 143ms/step - loss: 0.3033 - acc: 0.8695 - val_loss: 0.3333 - val_acc: 0.8562
Epoch 10/25
101/101 [==============================] - 13s 126ms/step - loss: 0.3141 - acc: 0.8641 - val_loss: 0.3155 - val_acc: 0.8647
Epoch 11/25
101/101 [==============================] - 17s 166ms/step - loss: 0.3032 - acc: 0.8672 - val_loss: 0.3088 - val_acc: 0.8667
Epoch 12/25
101/101 [==============================] - 17s 166ms/step - loss: 0.2906 - acc: 0.8755 - val_loss: 0.3450 - val_acc: 0.8562
Epoch 13/25
101/101 [==============================] - 16s 155ms/step - loss: 0.2884 - acc: 0.8759 - val_loss: 0.3135 - val_acc: 0.8688
Epoch 14/25
101/101 [==============================] - 16s 155ms/step - loss: 0.2943
相關推薦
基於keras的影象多分類-flower
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPoolin
基於keras實現多標籤分類(multi-label classification)
首先討論多標籤分類資料集(以及如何快速構建自己的資料集)。
之後簡要討論SmallerVGGNet,我們將實現的Keras神經網路架構,並用於多標籤分類。
然後我們將實施SmallerVGGNet並使用我們的多標籤分類資料集對其進行訓練。
最後,我們將通過在示例影象上測試我
keras系列︱影象多分類訓練與利用bottleneck features進行微調(三)
不得不說,這深度學習框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是錯的,快到官方文件也有舊的沒更新,前路坑太多。
到發文為止,已經有theano/tensorflow/CNTK支援keras,雖然說tensorflow造勢很多,但是筆
【火爐煉AI】深度學習008-Keras解決多分類問題
【火爐煉AI】深度學習008-Keras解決多分類問題
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0)
在我前面的文章【火爐煉AI】深
利用Tensorflow構建CNN影象多分類模型及影象引數、資料維度變化情況例項分析
本文以CIFAR-10為資料集,基於Tensorflow介紹了CNN(卷積神經網路)影象分類模型的構建過程,著重分析了在建模過程中卷積層、池化層、扁平化層、全連線層、輸出層的運算機理,以及經過運算後圖像尺寸、資料維度等引數的變化情況。
CIFAR-10資料
基於Tensorflow實現多分類支援向量機
1、匯入必要的程式設計庫;
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from sklearn import datasets
sess = tf.Se
focal loss論文筆記(附基於keras的多類別focal loss程式碼)
一.focal loss論文
二.focal loss提出的目的
解決one-stage目標檢測是場景下前景和背景極度不平衡的情況(1:1000)
讓模型在訓練的時候更加關注hard examples(前景)。
另外two-stage的檢測器是用一
Keras之DNN:基於Keras(sigmoid+linear+mse+predict)利用DNN實現迴歸預測——DIY多分類資料集&預測新資料點
Keras之DNN:基於Keras(sigmoid+linear+mse+predict)利用DNN實現迴歸預測——DIY多分類資料集&預測新資料點
輸出結果
實現程式碼
# coding:utf-8
Xa=[]
Xb=[]
for i in ra
多分類例項:鳶尾花分類-基於keras的python學習筆記(五)
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_44474718/article/details/86420803 資料集可以從UCI機器學習倉庫下載(http://archive.ics.uci.edu/ml/datasets
Python機器學習筆記:利用Keras進行多類分類
名稱 encoder 創建 numeric 種類 deep ast 4.0 允許 Keras是一個用於深度學習的Python庫,它包含高效的數值庫Theano和TensorFlow。
本文的目的是學習如何從csv中加載數據並使其可供Keras使用,如何用神經網絡建立
Keras入門(一)搭建深度神經網絡(DNN)解決多分類問題
-s pil return 進行 stat var das 部分 sof Keras介紹
??Keras是一個開源的高層神經網絡API,由純Python編寫而成,其後端可以基於Tensorflow、Theano、MXNet以及CNTK。Keras 為支持快速實驗而生,能夠把
Keras多分類例項:鳶尾花
鳶尾花資料集具有4個數值型輸入專案,並且數值具有相同的尺度,輸出專案是鳶尾花的三個子類。
這裡使用的是Scikit-Learn中提供的資料集,省略了資料預處理的過程,如果在UCI上面下載的話要使用Pandas中的read_csv()函式匯入資料,並使用Scikit-Learn的LabelEnco
基於深度學習和遷移學習的遙感影象場景分類實踐(AlexNet、ResNet)
卷積神經網路(CNN)在影象處理方面有很多出色的表現,在ImageNet上有很多成功的模型都是基於CNN的。AlexNet是具有歷史意義的一個網路,2012年提出來當年獲得了當年的ImageNet LSVRC比賽的冠軍,此後ImageNet LSVRC的冠軍都是都是用CNN做的,並且層
【火爐煉AI】深度學習009-用Keras遷移學習提升性能(多分類問題)
tro ray size array 全連接 步驟 loss pytho numpy 【火爐煉AI】深度學習009-用Keras遷移學習提升性能(多分類問題)
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn
【火爐煉AI】深度學習010-Keras微調提升效能(多分類問題)
【火爐煉AI】深度學習010-Keras微調提升效能(多分類問題)
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0)
前面的文章(【火爐
Keras之DNN:基於Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN實現分類預測概率——DIY二分類資料集&預測新資料點
#Keras之DNN:基於Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN實現分類預測概率——DIY二分類資料集&預測新資料點
輸出結果
實現程式碼
# coding:utf-8
#Ke
基於混淆矩陣計算多分類的準確率和召回率
定義
TP-將正類預測為正類
FN-將正類預測為負類
FP-將負類預測位正類
TN-將負類預測位負類
準確率(正確率)=所有預測正確的樣本/總的樣本 (TP+TN)/總
精確率= 將正類預測為正類 / 所有預測為正類 TP/(TP+FP)
召回率 = 將正類預
【NLP】【八】基於keras與imdb影評資料集做情感分類
【一】本文內容綜述
1. keras使用流程分析(模型搭建、模型儲存、模型載入、模型使用、訓練過程視覺化、模型視覺化等)
2. 利用keras做文字資料預處理
【二】環境準備
1. 資料集下載:http://ai.stanford.edu/~amaas/data/sentiment/
基於Keras的LSTM多變數時間序列預測 (學習筆記)
本文翻譯自Jason Brownlee的部落格https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/
本部落格主要參考以下中文版部落格
https://blog.csdn.net/qq_280
基於Keras的LSTM多變數時間序列預測(北京PM2.5資料集pollution.csv)
基於Keras的LSTM多變數時間序列預測
傳統的線性模型難以解決多變數或多輸入問題