【人工智能】神经网络优化:复杂度学习率、激活函数、损失函数、缓解过拟合、优化器 1

简介: 【人工智能】神经网络优化:复杂度学习率、激活函数、损失函数、缓解过拟合、优化器

预备知识


import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import random
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 正常显示负号

tf.where()

tf.where(条件语句,真返回值,假返回值)

a = tf.constant([1,2,3,1,1])
b = tf.constant([0,1,3,4,5])
c = tf.where(tf.greater(a,b),a,b) # 若a > b ,则返回a对应位置元素,否则返回b对应位置元素
print(c)
tf.Tensor([1 2 3 4 5], shape=(5,), dtype=int32)

np.random.RandomState.rand()

返回一个[0,1)之间的随机数

np.random.RandomState.rand(维度)

若参数 维度 为空,则返回一个0~1之间的标量

rdm = np.random.RandomState(seed = 1) # seed=常数 每次产生的随机数相同
a = rdm.rand() # 返回一个随机标量
b = rdm.rand(2,3) # 返回维度为二行三列随机数矩阵(第一个维度两个元素,第二个维度三个元素)
print("a:",a)
print("b:",b)
a: 0.417022004702574
b: [[7.20324493e-01 1.14374817e-04 3.02332573e-01]
 [1.46755891e-01 9.23385948e-02 1.86260211e-01]]

np.vstack()

将两个数组按垂直方向叠加

np.vstack(数组1,数组2)

a = np.array([1,2,3])
b = np.array([3,3,3])
c = np.vstack((a,b))
print(c)
[[1 2 3]
 [3 3 3]]

np.mgrid[] .ravel() np.c_[]

三个一起使用,生成网格坐标点

np.mgrid[]

np.mgrid[起始值:结束值:步长,起始值:结束值:步长,……]

x.ravel()

将x变为一维数组

np.c_[]

np.c_[数组1,数组2,……]

使返回的间隔数值点配对

# 生成等间隔数值点
x, y = np.mgrid[1:3:1, 2:4:0.5]
# 将x, y拉直,并合并配对为二维张量,生成二维坐标点
grid = np.c_[x.ravel(), y.ravel()]
print("x:\n", x)
print("y:\n", y)
print("x.ravel():\n", x.ravel())
print("y.ravel():\n", y.ravel())
print('grid:\n', grid)
x:
 [[1. 1. 1. 1.]
 [2. 2. 2. 2.]]
y:
 [[2.  2.5 3.  3.5]
 [2.  2.5 3.  3.5]]
x.ravel():
 [1. 1. 1. 1. 2. 2. 2. 2.]
y.ravel():
 [2.  2.5 3.  3.5 2.  2.5 3.  3.5]
grid:
 [[1.  2. ]
 [1.  2.5]
 [1.  3. ]
 [1.  3.5]
 [2.  2. ]
 [2.  2.5]
 [2.  3. ]
 [2.  3.5]]

神经网络(NN)复杂度

NN复杂度:多用NN层数和NN参数的个数表示

  • 空间复杂度
  • 层数 = 隐藏层的层数 + 1个输出层
  • 总参数 = 总w + 总b
  • 时间复杂度
  • 乘加运算次数

q1.png

上图 第一层参数个数是 三行四列w+4个偏置b;第二层参数个数是四行二列w+2个偏置b。总共26个参数

学习率

q2.png

学习率lr = 0.001时,参数w更新过慢;lr = 0.999时,,参数w不收敛。那么学习率设置多少合适呢?

在实际应用中,可以先用较大的学习率,快速找到较优值,然后逐步减小学习率,使模型找到最优解使模型在训练后期稳定。——指数衰减学习率

指数衰减学习率

指数衰减学习率 = 初始学习率 * 学习率衰减率 (当前轮数/多少轮衰减一次)

备注: (当前轮数/多少轮衰减一次) 是上标

w = tf.Variable(tf.constant(5, dtype=tf.float32))
# lr = 0.2
epoch = 40
LR_BASE = 0.2
LR_DECAY = 0.99
LR_STEP = 1 # 决定更新频率
epoch_all=[]
lr_all = []
w_numpy_all=[]
loss_all=[]
for epoch in range(epoch):  # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环40次迭代。
    lr = LR_BASE * LR_DECAY **(epoch/LR_STEP) # 根据当前迭代次数,动态改变学习率的值
    lr_all.append(lr)
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导
    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))
    epoch_all.append(epoch)
    w_numpy_all.append(w.numpy())
    loss_all.append(loss)
fig,axes = plt.subplots(nrows=1,ncols=3,figsize=(10,5),dpi=300)  
axes[0].plot(epoch_all,lr_all,color="g",linestyle="-",label="学习率") # 绘画
axes[0].plot(epoch_all,w_numpy_all,color="k",linestyle="-.",label="参数") # 绘画
axes[0].plot(epoch_all,loss_all,color="b",linestyle="--",label="损失率") # 绘画
axes[0].set_title("指数衰减学习率")
axes[0].set_xlabel("epoch")
axes[0].set_label("data")
axes[0].legend(loc="upper right")# 显示图例必须在绘制时设置好
axes[1].plot(epoch_all,lr_all,color="g",linestyle="-",label="学习率") # 绘画
axes[1].plot(epoch_all,w_numpy_all,color="k",linestyle="-.",label="参数") # 绘画
axes[1].set_title("指数衰减学习率")
axes[1].set_xlabel("epoch")
axes[1].set_ylabel("data")
axes[1].legend(loc="upper right")# 显示图例必须在绘制时设置好
axes[2].plot(epoch_all,lr_all,color="g",linestyle="-",label="学习率") # 绘画
axes[2].set_title("指数衰减学习率")
axes[2].set_xlabel("epoch")
axes[2].set_ylabel("data")
axes[2].legend(loc="upper right")# 显示图例必须在绘制时设置好
plt.show()
# lr初始值:0.2   请自改学习率  0.001  0.999 看收敛过程
# 最终目的:找到 loss 最小 即 w = -1 的最优参数w
After 0 epoch,w is 2.600000,loss is 36.000000
After 1 epoch,w is 1.174400,loss is 12.959999
After 2 epoch,w is 0.321948,loss is 4.728015
After 3 epoch,w is -0.191126,loss is 1.747547
After 4 epoch,w is -0.501926,loss is 0.654277
After 5 epoch,w is -0.691392,loss is 0.248077
After 6 epoch,w is -0.807611,loss is 0.095239
After 7 epoch,w is -0.879339,loss is 0.037014
After 8 epoch,w is -0.923874,loss is 0.014559
After 9 epoch,w is -0.951691,loss is 0.005795
After 10 epoch,w is -0.969167,loss is 0.002334
After 11 epoch,w is -0.980209,loss is 0.000951
After 12 epoch,w is -0.987226,loss is 0.000392
After 13 epoch,w is -0.991710,loss is 0.000163
After 14 epoch,w is -0.994591,loss is 0.000069
After 15 epoch,w is -0.996452,loss is 0.000029
After 16 epoch,w is -0.997660,loss is 0.000013
After 17 epoch,w is -0.998449,loss is 0.000005
After 18 epoch,w is -0.998967,loss is 0.000002
After 19 epoch,w is -0.999308,loss is 0.000001
After 20 epoch,w is -0.999535,loss is 0.000000
After 21 epoch,w is -0.999685,loss is 0.000000
After 22 epoch,w is -0.999786,loss is 0.000000
After 23 epoch,w is -0.999854,loss is 0.000000
After 24 epoch,w is -0.999900,loss is 0.000000
After 25 epoch,w is -0.999931,loss is 0.000000
After 26 epoch,w is -0.999952,loss is 0.000000
After 27 epoch,w is -0.999967,loss is 0.000000
After 28 epoch,w is -0.999977,loss is 0.000000
After 29 epoch,w is -0.999984,loss is 0.000000
After 30 epoch,w is -0.999989,loss is 0.000000
After 31 epoch,w is -0.999992,loss is 0.000000
After 32 epoch,w is -0.999994,loss is 0.000000
After 33 epoch,w is -0.999996,loss is 0.000000
After 34 epoch,w is -0.999997,loss is 0.000000
After 35 epoch,w is -0.999998,loss is 0.000000
After 36 epoch,w is -0.999999,loss is 0.000000
After 37 epoch,w is -0.999999,loss is 0.000000
After 38 epoch,w is -0.999999,loss is 0.000000
After 39 epoch,w is -0.999999,loss is 0.000000

q3.png

激活函数

q4.png

  • 线性函数
  • y = x * w + b
  • 非线性函数(MP模型)
  • y = f(x * w + b )

其中f便是激活函数

优秀的激活函数具有以下特点

  • 非线性:激活函数非线性时,多层神经网络可逼近所有函数
  • 可微性:优化器大多用梯度下降更新参数(如果激活函数不可微,就无法更新参数了)
  • 单调性:当激活函数是单调的,能保证单层网络的损失函数是凸函数
  • 近似恒等性:f(x)≈x当参数初始化为随机小值时,神经网络更稳定

激活函数输出值的范围

  • 激活函数输出为有限值时,基于梯度的优化方法更稳定
  • 激活函数输出为无限值时,建议调小学习率

常用激活函数 Sigmoid函数

tf.nn.sigmoid(x)

q5.png

特点:

(1)已造成梯度消失

(2)输出非0均值,收敛慢

(3)幂运算复杂,训练时间长

常用激活函数 Tanh函数

q6.png

常用激活函数 Relu函数

w1.png

注意要避免过多的负数特征送入relu函数,避免神经元死亡

  • 改进随机初始化
  • 设置更小的学习率,减少参数分布的巨大变化

常用激活函数 Leaky Relu函数

Leaky Relu函数是为了解决relu负区间为0引起神经元死亡问题而设计

w2.png

损失函数loss

损失函数显示出预测值(y)与已知答案y_的差距

主流loss的三种计算方法

  • 【均方误差】mse(Mean Squared Error)
  • 前向传播计算出结果y与已知标准答案y_之差的平方_

w3.png

  • 自定义
  • 【交叉熵】ce (Cross Entropy)

通过均方误差预测酸奶日销量

已知 酸奶日销量y。其中x1,x2是影响日销量的元素。

建模前,需要采集的数据有

  • 每日的x1,x2
  • 销量y_

拟造数据集 X,Y:y_=x1+x2;噪声:-0.05~+0.05。拟合可以预测销量的函数

SEED = 23455
rdm = np.random.RandomState(seed=SEED)  # 生成[0,1)之间的随机数 此时为了方便调试因此写固定值,实际应用不写seed的
x = rdm.rand(32, 2)
y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x]  # 生成噪声[0,1)/10=[0,0.1); [0,0.1)-0.05=[-0.05,0.05)
x = tf.cast(x, dtype=tf.float32)
w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1)) # 两行一列
epoch = 15000 # 迭代次数
lr = 0.002 # 学习率
epoch_all=[]
w0_numpy_all = []
w1_numpy_all = []
for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y = tf.matmul(x, w1)
        loss_mse = tf.reduce_mean(tf.square(y_ - y))
    grads = tape.gradient(loss_mse, w1) # 损失函数对待训练参数w1求偏导
    w1.assign_sub(lr * grads)
    if epoch % 500 == 0: # 每迭代500次记录一次数据
#         print("After %d training steps,w1 is " % (epoch))
        epoch_all.append(epoch)
        w0_numpy_all.append(w1.numpy()[0])
        w1_numpy_all.append(w1.numpy()[1])
#         print(w1.numpy(), "\n")
plt.figure(figsize=(10,5),dpi=360)
plt.plot(epoch_all,w0_numpy_all,color="g",linestyle="-",label="x1 标准答案") # 绘画
plt.plot(epoch_all,w1_numpy_all,color="k",linestyle="-.",label="x2 预测答案") # 绘画
plt.title("预测酸奶日销量")
plt.xlabel("epoch")
plt.ylabel("data")
plt.legend(loc="upper right")# 显示图例必须在绘制时设置好
plt.show()        
# print("Final w1 is: ", w1.numpy())
# 最后得到的结果是趋近于1的

q1.png

上图结果 y=1.00 * x1 + 1.00 * x2符合制造数据集的公式 y = 1 * x1 + 1 * x2,说明预测酸奶日销量的公式拟合正确

上述方法,如果预测多了,损失成本;如果预测少了,损失利润。

若 利润 ≠ 成本 ,则mes产生的loss无法利益最大化

为了实现利益最大化,在此引入自定义损失函数

自定义函数

q2.png

上图中,PROFIT代表利润,COST代表成本

如果 预测结果y > 标准答案 y_ 则预测的多了,损失成本,则应该 ( y - y_ ) * COST

如果 预测结果y < 标准答案 y_ 则预测的少了,损失利润,则应该 ( y_ - y ) * COST

通过自定义函数预测商品销量

loss_zdy = tf.reduce_sum(tf.where( tf.greater(y,y_) , COST*(y-y_) , PROFIT*(y_-y) ))

import tensorflow as tf
import numpy as np
SEED = 23455
COST = 1 # 成本
PROFIT = 99
rdm = np.random.RandomState(SEED)
x = rdm.rand(32, 2)
y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x]  # 生成噪声[0,1)/10=[0,0.1); [0,0.1)-0.05=[-0.05,0.05)
x = tf.cast(x, dtype=tf.float32)
w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))
epoch = 10000
lr = 0.002
w0_numpy_all = []
w1_numpy_all = []
epoch_all = []
for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y = tf.matmul(x, w1)
        loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_) * COST, (y_ - y) * PROFIT))
    grads = tape.gradient(loss, w1)
    w1.assign_sub(lr * grads)
    if epoch % 500 == 0:
#         print("After %d training steps,w1 is " % (epoch))
#         print(w1.numpy()[1], "\n")
          epoch_all.append(epoch)
          w0_numpy_all.append(w1.numpy()[0])
          w1_numpy_all.append(w1.numpy()[1])
# print("Final w1 is: ", w1.numpy())
plt.figure(figsize=(10,5),dpi=360)
plt.plot(epoch_all,w0_numpy_all,color="g",linestyle="-",label="x1 标准答案") # 绘画
plt.plot(epoch_all,w1_numpy_all,color="k",linestyle="-.",label="x2 预测答案") # 绘画
plt.title("预测酸奶日销量")
plt.xlabel("epoch")
plt.ylabel("data")
plt.legend(loc="upper right")# 显示图例必须在绘制时设置好
plt.show()  
# 自定义损失函数
# 酸奶成本1元, 酸奶利润99元
# 成本很低,利润很高,人们希望多预测些,生成模型系数大于1,往多了预测

q3.png

看上图可以发现,自定义损失函数的系数都大于均方误差做损失函数时的系数,即模型在尽量往大了预测,(大损成本小损利润)

接下来把成本改为99,利润改为1,如下:

import tensorflow as tf
import numpy as np
SEED = 23455
COST = 99 # 成本
PROFIT = 1
rdm = np.random.RandomState(SEED)
x = rdm.rand(32, 2)
y_ = [[x1 + x2 + (rdm.rand() / 10.0 - 0.05)] for (x1, x2) in x]  # 生成噪声[0,1)/10=[0,0.1); [0,0.1)-0.05=[-0.05,0.05)
x = tf.cast(x, dtype=tf.float32)
w1 = tf.Variable(tf.random.normal([2, 1], stddev=1, seed=1))
epoch = 10000
lr = 0.002
w0_numpy_all = []
w1_numpy_all = []
epoch_all = []
for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y = tf.matmul(x, w1)
        loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_) * COST, (y_ - y) * PROFIT))
    grads = tape.gradient(loss, w1)
    w1.assign_sub(lr * grads)
    if epoch % 500 == 0:
#         print("After %d training steps,w1 is " % (epoch))
#         print(w1.numpy()[1], "\n")
          epoch_all.append(epoch)
          w0_numpy_all.append(w1.numpy()[0])
          w1_numpy_all.append(w1.numpy()[1])
# print("Final w1 is: ", w1.numpy())
plt.figure(figsize=(10,5),dpi=360)
plt.plot(epoch_all,w0_numpy_all,color="g",linestyle="-",label="x1 标准答案") # 绘画
plt.plot(epoch_all,w1_numpy_all,color="k",linestyle="-.",label="x2 预测答案") # 绘画
plt.title("预测酸奶日销量")
plt.xlabel("epoch")
plt.ylabel("data")
plt.legend(loc="upper right")# 显示图例必须在绘制时设置好
plt.show()  
# 自定义损失函数
# 酸奶成本1元, 酸奶利润99元
# 成本很低,利润很高,人们希望多预测些,生成模型系数大于1,往多了预测

q4.png

看上图可以发现,模型在尽量往少了预测

交叉熵损失函数(Cross Entropy)

q5.png

q6.png

tensorflow交叉熵计算公式 tf.losses.categorical_crossentropy(标准答案y_,输出结果)

loss_ce1 = tf.losses.categorical_crossentropy([1, 0], [0.6, 0.4])
loss_ce2 = tf.losses.categorical_crossentropy([1, 0], [0.8, 0.2])
print("loss_ce1:", loss_ce1)
print("loss_ce2:", loss_ce2)
# 交叉熵损失函数
loss_ce1: tf.Tensor(0.5108256, shape=(), dtype=float32)
loss_ce2: tf.Tensor(0.22314353, shape=(), dtype=float32)

同时计算概率分布和交叉熵的函数

tf.nn.softmax_cross_entropy_with_logits(y_,y)|

y_ = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 0]])
y = np.array([[12, 3, 2], [3, 10, 1], [1, 2, 5], [4, 6.5, 1.2], [3, 6, 1]])
## 分步完成
y_pro = tf.nn.softmax(y)
loss_ce1 = tf.losses.categorical_crossentropy(y_,y_pro)
## 一步完成
loss_ce2 = tf.nn.softmax_cross_entropy_with_logits(y_, y)
print('分步计算的结果:\n', loss_ce1)
print('结合计算的结果:\n', loss_ce2)
分步计算的结果:
 tf.Tensor(
[1.68795487e-04 1.03475622e-03 6.58839038e-02 2.58349207e+00
 5.49852354e-02], shape=(5,), dtype=float64)
结合计算的结果:
 tf.Tensor(
[1.68795487e-04 1.03475622e-03 6.58839038e-02 2.58349207e+00
 5.49852354e-02], shape=(5,), dtype=float64)
相关文章
|
28天前
|
机器学习/深度学习 人工智能 算法
普通人怎么学人工智能?这些隐藏学习秘籍大揭秘,生成式人工智能认证(GAI认证)来助力
在人工智能(AI)快速发展的今天,普通人学习AI已成为必然趋势。本文从明确学习目标与路径、利用多元化资源、注重实践应用、关注GAI认证及持续自我提升五个方面,为普通人提供系统化的AI学习指南。通过设定目标、学习编程语言、参与项目实践和获取专业认证,普通人可逐步掌握AI技能,在未来职场中占据优势并开启智能时代新篇章。
|
22天前
|
人工智能 算法 安全
深度:善用人工智能推动高等教育学习、教学与治理的深层变革
本文探讨人工智能技术与高等教育深度融合带来的系统性变革,从学习进化、教学革新与治理重构三个维度展开。生成式AI作为技术前沿代表,正通过标准化认证体系(如培生的Generative AI Foundations)提升职场人士、教育者及学生的能力。文章强调批判性思维、高阶认知能力与社交能力的培养,主张教师从经验主导转向数据驱动的教学模式,并提出构建分布式治理结构以适应技术迭代,最终实现人机协同的教育新生态,推动高等教育在智能时代焕发人性光辉。
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
143 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
174 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
7月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
246 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
4月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
293 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
7月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
253 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
5月前
|
人工智能 自然语言处理 搜索推荐
人工智能与教育:个性化学习的未来
【10月更文挑战第31天】在科技飞速发展的今天,人工智能(AI)正深刻改变教育领域,尤其是个性化学习的兴起。本文探讨了AI如何通过智能分析、个性化推荐、智能辅导和虚拟现实技术推动个性化学习,分析了其带来的机遇与挑战,并展望了未来的发展前景。
|
7月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
247 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
6月前
|
人工智能 搜索推荐 语音技术
人工智能与未来教育:重塑学习方式的双刃剑
在21世纪,人工智能(AI)技术正以前所未有的速度发展,深刻影响着社会的各个方面,其中包括教育领域。本文探讨了AI如何改变传统教育模式,提出其既带来积极影响也伴随着挑战的观点。通过分析具体案例和数据,文章旨在启发读者思考如何在保留人类教师不可替代价值的同时,有效利用AI技术优化教育体验。

热门文章

最新文章

下一篇
oss创建bucket