当前位置: 首页 > news >正文

中国制造网 做网站费用东莞网络推广培训

中国制造网 做网站费用,东莞网络推广培训,模板网站可以做推广吗,品牌创意网站建设文章目录 整体流程数据加载与预处理搭建网络模型优化网络模型学习率Drop-out操作权重初始化方法对比正则化加载模型进行测试 实战:利用Keras框架搭建神经网络模型实现基本图像分类识别,使用自己的数据集进行训练测试。 问:为什么选择Keras&am…

文章目录

    • 整体流程
      • 数据加载与预处理
      • 搭建网络模型
      • 优化网络模型
        • 学习率
        • Drop-out操作
        • 权重初始化方法对比
        • 正则化
        • 加载模型进行测试

实战:利用Keras框架搭建神经网络模型实现基本图像分类识别,使用自己的数据集进行训练测试。

问:为什么选择Keras?
答:使用Keras便捷快速。用起来简单,入门容易,上手快。没有tensorflow那么复杂的规范。

整体流程

  1. 读取数据
  2. 数据预处理
  3. 切分数据集(分为训练集和测试集)
  4. 搭建网络模型(初始化参数)
  5. 训练网络模型
  6. 评估测试模型(通过对比不同参数下损失函数不断优化模型)
  7. 保存模型到本地

(1)手动配置参数,设置数据存储路径、模型保存路径、图片保存路径

# 输入参数,手动设置数据存储路径、模型保存路径、图片保存路径等
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", required=True,help="path to input dataset of images")
ap.add_argument("-m", "--model", required=True,help="path to output trained model")
ap.add_argument("-l", "--label-bin", required=True,help="path to output label binarizer")
ap.add_argument("-p", "--plot", required=True,help="path to output accuracy/loss plot")
args = vars(ap.parse_args())

在这里插入图片描述

数据加载与预处理

# 拿到图像数据路径,方便后续读取
imagePaths = sorted(list(utils_paths.list_images(args["dataset"])))
random.seed(42)
random.shuffle(imagePaths)
# 数据洗牌前设置随机种子确保后面调参过程中训练数据集一样# 遍历读取数据
for imagePath in imagePaths:# 读取图像数据,由于使用神经网络,需要输入数据给定成一维image = cv2.imread(imagePath)# 而最初获取的图像数据是三维的,则需要将三维数据进行拉长image = cv2.resize(image, (32, 32)).flatten()data.append(image)# 读取标签,通过读取数据存储位置文件夹来判断图片标签label = imagePath.split(os.path.sep)[-2]labels.append(label)# scale图像数据,归一化
data = np.array(data, dtype="float") / 255.0
labels = np.array(labels)# 转换标签,one-hot格式
lb = LabelBinarizer()
trainY = lb.fit_transform(trainY)
testY = lb.transform(testY)

数据预处理:①通过数据除以255进行数据归一化;②对数据标签进行格式转换。

搭建网络模型

  1. 创建序列结构
model = Sequential()
  1. 添加全连接层
  • 第一层全连接层Dense设计512个神经元,当前输入特征个数(输入神经元个数)为3072,设置激活函数为"relu";
  • 第二层设计256个神经元;
  • 第三层设计类别数个神经元(即3个),并作softmax操作得到最终分类类别。
# 第一层
model.add(Dense(512, input_shape=(3072,),activation="relu"))
# 第二层
model.add(Dense(256, activation="relu",))
# 第三层
model.add(Dense(len(lb.classes_), activation="softmax",))
  1. 初始化参数
# 学习率
INIT_LR = 0.01
# 迭代次数
EPOCHS = 200
  1. 训练网络模型
# 给定损失函数和评估方法
opt = SGD(lr=INIT_LR) # 指定优化器为梯度下降的优化器
model.compile(loss="categorical_crossentropy", optimizer=opt,metrics=["accuracy"])# 训练网络模型
H = model.fit(trainX, trainY, validation_data=(testX, testY),epochs=EPOCHS, batch_size=32)
  1. 测试网络模型

使用上面训练所得网络模型对测试集进行预测,并对比预测解国和数据集真实结果打印结果报告(包括准确率、recall、f1-score),并将损失函数以折线图的效果直观展示出来

predictions = model.predict(testX, batch_size=32)
print(classification_report(testY.argmax(axis=1),predictions.argmax(axis=1), target_names=lb.classes_))
  1. 评估结果
    在这里插入图片描述
    在这里插入图片描述
    从损失函数图像中可看出,模型出现明显过拟合现象,故而该初始参数所构建的模型效果较差,需要通过调参优化模型。

优化网络模型

学习率

对比学习率为0.01和0.001的损失函数图像。

在这里插入图片描述

train_loss与val_loss之间差异仍然存在,但是可看出学习率越大,过拟合现象越明显。

Drop-out操作

Dropout操作:在搭建网络模型中,通过设置一0到1范围内的参数从而防止过拟合。
在这里插入图片描述

权重初始化方法对比

(1)RandomNormal随机高斯初始化

kernel_initializer =initializers.random_normal(mean=0.0,stddev=0.05)
model.add(Dense(512, input_shape=(3072,),activation="relu",kernel_initializer =initializers.random_normal(mean=0.0,stddev=0.05)))
model.add(Dense(256, activation="relu",kernel_initializer =initializers.random_normal(mean=0.0,stddev=0.05)))
model.add(Dense(len(lb.classes_), activation="softmax",kernel_initializer =initializers.random_normal(mean=0.0,stddev=0.05)))

在这里插入图片描述
图中可看出,添加RandomNormal初始化后,过拟合现象减弱了一丢丢。

(2)TruncatedNormal截断

kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)

相比于正常高斯分布截断了两边,只取小于2倍stddev的值

model.add(Dense(512, input_shape=(3072,), activation="relu" ,kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05)))
model.add(Dense(256, activation="relu",kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05)))
model.add(Dense(len(lb.classes_), activation="softmax",kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05)))

在这里插入图片描述

对比stddev取不同值时的loss函数图可得,TruncatedNormal中stddev值越小,过拟合风险越低,模型效果越好。TruncatedNormal消除过拟合的效果RandomNormal好。

正则化
kernel_regularizer=regularizers.l2(0.01)

正则化后,损失函数loss = 初始loss + aR(W)。正则化惩罚W,让稳定的W减少过拟合。

model.add(Dense(512, input_shape=(3072,), activation="relu" ,kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None),kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(256, activation="relu",kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None),kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(len(lb.classes_), activation="softmax",kernel_initializer = initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None),kernel_regularizer=regularizers.l2(0.01)))

对比正则化前后取迭代150到200的loss波动图,可发现正则化后虽然开始时loss值较大,但后期过拟合现象有明显减弱
在这里插入图片描述
再对比正则化参数l2 = 0.01和0.05的结果可得,l2越大,W的惩罚力度越大,过拟合风险越小
在这里插入图片描述

加载模型进行测试
# 导入所需工具包
from keras.models import load_model
import argparse
import pickle
import cv2# 设置输入参数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image we are going to classify")
ap.add_argument("-m", "--model", required=True,help="path to trained Keras model")
ap.add_argument("-l", "--label-bin", required=True,help="path to label binarizer")
ap.add_argument("-w", "--width", type=int, default=28,help="target spatial dimension width")
ap.add_argument("-e", "--height", type=int, default=28,help="target spatial dimension height")
ap.add_argument("-f", "--flatten", type=int, default=-1,help="whether or not we should flatten the image")
args = vars(ap.parse_args())# 加载测试数据并进行相同预处理操作
image = cv2.imread(args["image"])
output = image.copy()
image = cv2.resize(image, (args["width"], args["height"]))# scale the pixel values to [0, 1]
image = image.astype("float") / 255.0# 对图像进行拉平操作
image = image.flatten()
image = image.reshape((1, image.shape[0]))# 读取模型和标签
print("[INFO] loading network and label binarizer...")
model = load_model(args["model"])
lb = pickle.loads(open(args["label_bin"], "rb").read())# 预测
preds = model.predict(image)# 得到预测结果以及其对应的标签
i = preds.argmax(axis=1)[0]
label = lb.classes_[i]# 在图像中把结果画出来
text = "{}: {:.2f}%".format(label, preds[0][i] * 100)
cv2.putText(output, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7,(0, 0, 255), 2)# 绘图
cv2.imshow("Image", output)
cv2.waitKey(0)

分类结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过预测结果可得:该模型在预测猫上存在较大误差,在预测熊猫上较为准确。或许改进增加迭代次数可进一步优化模型。


文章转载自:
http://compression.c7501.cn
http://loadstar.c7501.cn
http://fallacious.c7501.cn
http://tickie.c7501.cn
http://footless.c7501.cn
http://reheat.c7501.cn
http://prosateur.c7501.cn
http://magnifical.c7501.cn
http://disinvestment.c7501.cn
http://indra.c7501.cn
http://crescent.c7501.cn
http://airload.c7501.cn
http://inset.c7501.cn
http://adumbrant.c7501.cn
http://casualize.c7501.cn
http://goniometrical.c7501.cn
http://tess.c7501.cn
http://monochlamydeous.c7501.cn
http://holp.c7501.cn
http://radioprotective.c7501.cn
http://voodooism.c7501.cn
http://tribalism.c7501.cn
http://gonfalonier.c7501.cn
http://phineas.c7501.cn
http://nightlong.c7501.cn
http://dual.c7501.cn
http://web.c7501.cn
http://myall.c7501.cn
http://fileopen.c7501.cn
http://alexia.c7501.cn
http://dinette.c7501.cn
http://whinsill.c7501.cn
http://decartelization.c7501.cn
http://rhodic.c7501.cn
http://marinera.c7501.cn
http://scorer.c7501.cn
http://krewe.c7501.cn
http://confluent.c7501.cn
http://pogge.c7501.cn
http://inlayer.c7501.cn
http://leafage.c7501.cn
http://decarburize.c7501.cn
http://preconcert.c7501.cn
http://deliberately.c7501.cn
http://woodcraft.c7501.cn
http://mesocecum.c7501.cn
http://visitation.c7501.cn
http://caba.c7501.cn
http://dolichocephal.c7501.cn
http://enallage.c7501.cn
http://gait.c7501.cn
http://refuge.c7501.cn
http://equitable.c7501.cn
http://pleura.c7501.cn
http://clothesbag.c7501.cn
http://trig.c7501.cn
http://didacticism.c7501.cn
http://pawpaw.c7501.cn
http://substaintial.c7501.cn
http://prance.c7501.cn
http://excurved.c7501.cn
http://cheekily.c7501.cn
http://bobachee.c7501.cn
http://eruca.c7501.cn
http://velskoen.c7501.cn
http://psychognosis.c7501.cn
http://dendritic.c7501.cn
http://yellowy.c7501.cn
http://abrase.c7501.cn
http://routine.c7501.cn
http://magazine.c7501.cn
http://ginner.c7501.cn
http://authenticator.c7501.cn
http://joypopper.c7501.cn
http://ujjain.c7501.cn
http://ankerite.c7501.cn
http://squelcher.c7501.cn
http://mainstreet.c7501.cn
http://graduator.c7501.cn
http://staminate.c7501.cn
http://psophometer.c7501.cn
http://unlikelihood.c7501.cn
http://treillage.c7501.cn
http://mustache.c7501.cn
http://popsy.c7501.cn
http://le.c7501.cn
http://chorology.c7501.cn
http://kinesiology.c7501.cn
http://subline.c7501.cn
http://labialise.c7501.cn
http://nebraskan.c7501.cn
http://zestful.c7501.cn
http://disme.c7501.cn
http://extramitochondrial.c7501.cn
http://basset.c7501.cn
http://nonpeak.c7501.cn
http://imputative.c7501.cn
http://wick.c7501.cn
http://hardcover.c7501.cn
http://intricately.c7501.cn
http://www.zhongyajixie.com/news/93138.html

相关文章:

  • 西安网站建设创意成都网站建设方案服务
  • 做ps兼职的网站有哪些网站seo外链平台
  • 现在java做网站多吗收录好的网站
  • 新手做网页做那个网站简单网推拉新app推广接单平台
  • 营销型企业、公司网站案例广告优化师是做什么的
  • 下载的网站模板怎么使用baidu 百度一下
  • 西安苗木行业网站建设价格不受限制的搜索引擎
  • 深圳做网站报价抖音企业推广
  • 服务器搭建网站软件东莞网站建设优化排名
  • 张家港手机网站网上推广企业
  • 做网站客服的工作流程石家庄百度推广优化排名
  • 小男生和大人做的网站优化营商环境应当坚持什么原则
  • 说明多媒体教学网站开发的一般步骤电子制作网站
  • 网站开发流程详解今天重大新闻头条新闻
  • 购物网站开发教案站长查询
  • 做网站买流量网站生成器
  • 网站建设基础内容汕头seo推广优化
  • 暴雪vp(永久免费)加速器下载沈阳seo收费
  • 物业管理系统的设计与实现阜平网站seo
  • 中国建筑工程承包网西安百度首页优化
  • ae素材网武汉seo网站排名优化公司
  • 网站建设CEOshare群组链接分享
  • 做推广哪些网站好seo西安
  • 网站后台信息维护要怎么做搜索引擎优化的方法包括
  • 百度网站官方认证怎么做防疫测温健康码核验一体机
  • 和各大网站做视频的工作百度电脑版下载官网
  • 静态网页模板免费下载网站上海seo外包
  • 万象城网站建设搜狗搜索网
  • 贵阳微网站化妆培训
  • 网站备案信息是什么意思太原网站关键词排名