神经网络优化(二) - 激活函数和损失函数

2023-11-13

1 神经网络中的激活函数activation function

1.1 引入激活函数概念

神经网络的基本构成单元是神经元。 

搭建神经网络一文中使用的神经元模型

这个神经元模型是较为简化的基本神经元模型。还有一种理论模型包含有激活函数偏置项的神经元模型

1943年McCulloch 和 Pitts 提出了一种神经元模型,这也就是McCulloch-Pitts神经元模型:

该神经元模型中的数学公式表示为?(∑????  + ?),f为激活函数

激活函数:引入非线性激活因素,避免∑????  + ?纯线性组合的缺陷,提高了模型的表达力,使模型具有更好的区分度。

1.2 常见的激活函数

常用的激活函数有 relu、sigmoid、tanh

 

1.2.1 激活函数relu

(1)tf中表达式: tf.nn.relu() 

(2)数学表达式

(3)函数图像

1.2.2 激活函数sigmoid

(1)Tensorflow中表达式: tf.nn.sigmoid() 

(2)数学表达式

(3)函数图像

1.2.3 激活函数tanh

(1)Tensorflow中表达式: tf.nn.tanh() 

(2)数学表达式

(3)函数图像

2 损失函数loss

损失函数:前向传播生成的预测值 (y) 与 标签 (y_) 之间的差距。

NN的优化目标:获得具有最小loss的神经网络模型。在训练神经网络时,就是通过不断改变神经网络中的权重参数、偏置量等参数,使损失函数不断减小,从而训练出更高准确率的神经网络模型。

常用的损失函数有均方误差mse(Mean Squared Error)、自定义和交叉熵ce(Cross Entropy)等

2.1 均方误差mse

2.1.1 均方误差的公式

假设有n个样本,其对应标签为y_,经神经网络计算的预测值为y。

(1)均方误差定义:

预测值y与标签y_差值平方和的平均数

(2)数学公式

(3)Tensorflow公式

loss_mse = tf.reduce_mean(tf.square(y_ - y))

2.1.2 均方误差的实例应用

拟合预测酸奶日销量的函数;便于准确预测销量后指导产量(最佳 销量=产量)。

假设预测酸奶日销量为y,影响日销量的两个因素x1、x2。并有采集的每日因素 x1、x2 和销量 y_ 历史数据。

(在实际上,并没有酸奶相关数据,所以需要拟造一套数据集并进行神经网络训练)

# 第一步 导入模块,生成数据集
import tensorflow as tf
import numpy as np
BATCH_SIZE = 8
SEED = 23455

rdm = np.random.RandomState(SEED)
# 拟为用32组数据训练神经网络,有2个特征参数
X = rdm.rand(32,2)
# 生成数据集标签,
# rdm.rand()函数返回值在0~1之间,确切地讲位于0.1~1之间,
# rdm.rand()/10.0-0.05的结果相对x1、x2来讲低一个量级,
# 这里表示仅对x1+x2的值微调。
Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)] for (x1, x2) in X]

# 第二步 定义前向传播过程
# placeholder为喂入数据集及数据标签占位
x = tf.placeholder(tf.float32, shape=(None, 2))
y_ = tf.placeholder(tf.float32, shape=(None, 1))
# 生成前向传播时所需权重参数赋值,标准差stddev=1
# 由于该神经网络为一层,所以仅赋一个权重参数即可
w1= tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))
# 矩阵运算,两个矩阵乘积
y = tf.matmul(x, w1)

# 第三步 损失函数及反向传播过程
# 选用均方误差MSE作为损失函数
loss_mse = tf.reduce_mean(tf.square(y_ - y))
# 选用梯度下降法作为权重优化函数
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_mse)

#第四步 生成会话,训练STEPS轮
with tf.Session() as sess:
    # 全局变量初始化
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    # 进行循环优化权重参数,20000轮
    STEPS = 20000
    for i in range(STEPS):
        # start为0、8、16、24
        start = (i*BATCH_SIZE) % 32
        # 每次喂入BATCH_SIZE数据量
        end = start + BATCH_SIZE
        # 执行数据训练过程,train_step权重优化函数,喂入数据集及对应标签
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]})
        
        # 每循环500次打印一下权重参数训练效果,
        if i % 500 == 0:
            print("After %d training steps, w1 is: " % (i))
            print(sess.run(w1), "\n")
            # 计算损失函数值,观察损失函数随训练次数的变化趋势
            totle_mse = sess.run(loss_mse, feed_dict={x: X, y_: Y_})
            print(totle_mse, "\n")
    print("Final w1 is: \n", sess.run(w1))

运行

After 0 training steps, w1 is: 
[[-0.80974597]
 [ 1.4852903 ]] 

0.6557005 

After 500 training steps, w1 is: 
[[-0.46074435]
 [ 1.641878  ]] 

0.35731 

After 1000 training steps, w1 is: 
[[-0.21939856]
 [ 1.6984766 ]] 

0.23248056 

After 1500 training steps, w1 is: 
[[-0.04415595]
 [ 1.7003176 ]] 

0.17040439 

After 2000 training steps, w1 is: 
[[0.08942621]
 [1.673328  ]] 

0.13303667 

After 2500 training steps, w1 is: 
[[0.19583555]
 [1.6322677 ]] 

0.10693912 

After 3000 training steps, w1 is: 
[[0.28375748]
 [1.5854434 ]] 

0.08706193 

After 3500 training steps, w1 is: 
[[0.35848638]
 [1.5374471 ]] 

0.071270935 

After 4000 training steps, w1 is: 
[[0.4233252]
 [1.4907392]] 

0.05849066 

After 4500 training steps, w1 is: 
[[0.48040032]
 [1.4465573 ]] 

0.048065245 

After 5000 training steps, w1 is: 
[[0.5311361]
 [1.4054534]] 

0.0395331 

After 5500 training steps, w1 is: 
[[0.57653254]
 [1.367594  ]] 

0.032540925 

After 6000 training steps, w1 is: 
[[0.6173259]
 [1.3329402]] 

0.02680777 

After 6500 training steps, w1 is: 
[[0.65408474]
 [1.3013425 ]] 

0.022105861 

After 7000 training steps, w1 is: 
[[0.68726856]
 [1.2726018 ]] 

0.018249318 

After 7500 training steps, w1 is: 
[[0.7172598]
 [1.2465004]] 

0.015086038 

After 8000 training steps, w1 is: 
[[0.74438614]
 [1.2228196 ]] 

0.012491369 

After 8500 training steps, w1 is: 
[[0.7689325]
 [1.2013482]] 

0.0103631 

After 9000 training steps, w1 is: 
[[0.79115146]
 [1.1818888 ]] 

0.00861741 

After 9500 training steps, w1 is: 
[[0.81126714]
 [1.1642567 ]] 

0.0071855206 

After 10000 training steps, w1 is: 
[[0.8294814]
 [1.1482829]] 

0.0060110046 

After 10500 training steps, w1 is: 
[[0.84597576]
 [1.1338125 ]] 

0.0050475756 

After 11000 training steps, w1 is: 
[[0.8609128]
 [1.1207061]] 

0.00425734 

After 11500 training steps, w1 is: 
[[0.87444043]
 [1.1088346 ]] 

0.0036091362 

After 12000 training steps, w1 is: 
[[0.88669145]
 [1.0980824 ]] 

0.0030774516 

After 12500 training steps, w1 is: 
[[0.8977863]
 [1.0883439]] 

0.0026413407 

After 13000 training steps, w1 is: 
[[0.9078348]
 [1.0795243]] 

0.002283624 

After 13500 training steps, w1 is: 
[[0.91693527]
 [1.0715363 ]] 

0.001990209 

After 14000 training steps, w1 is: 
[[0.92517716]
 [1.0643018 ]] 

0.0017495381 

After 14500 training steps, w1 is: 
[[0.93264157]
 [1.0577497 ]] 

0.0015521289 

After 15000 training steps, w1 is: 
[[0.9394023]
 [1.0518153]] 

0.0013901924 

After 15500 training steps, w1 is: 
[[0.9455251]
 [1.0464406]] 

0.0012573693 

After 16000 training steps, w1 is: 
[[0.95107025]
 [1.0415728 ]] 

0.0011484219 

After 16500 training steps, w1 is: 
[[0.9560928]
 [1.037164 ]] 

0.0010590521 

After 17000 training steps, w1 is: 
[[0.96064115]
 [1.0331714 ]] 

0.0009857531 

After 17500 training steps, w1 is: 
[[0.96476096]
 [1.0295546 ]] 

0.0009256217 

After 18000 training steps, w1 is: 
[[0.9684917]
 [1.0262802]] 

0.0008763098 

After 18500 training steps, w1 is: 
[[0.9718707]
 [1.0233142]] 

0.00083585805 

After 19000 training steps, w1 is: 
[[0.974931 ]
 [1.0206276]] 

0.00080267614 

After 19500 training steps, w1 is: 
[[0.9777026]
 [1.0181949]] 

0.0007754609 

[Finished in 11.7s]
运行结果代码

为了便于对比观察,对比头2次和尾2次的数据

After 0 training steps, w1 is: 
[[-0.80974597]
 [ 1.4852903 ]] 

0.6557005 

After 500 training steps, w1 is: 
[[-0.46074435]
 [ 1.641878  ]] 

0.35731 

……
After 19000 training steps, w1 is: 
[[0.974931 ]
 [1.0206276]] 

0.00080267614 

After 19500 training steps, w1 is: 
[[0.9777026]
 [1.0181949]] 

0.0007754609 

此时耗时Finished in 11.7s

也可以将损失函数计算 totle_mse = sess.run(loss_mse, feed_dict={x: X, y_: Y_}) 放在 if i % 500 == 0 外面,耗时 [Finished in 18.2s],这间接说明两种情况 loss_mse 的执行次数是不一样的。

在 if i % 500 == 0 外面时,每次 for i in range(STEPS) 都会运行一次,而在其里面是每隔500次运行一次。

 

注意(没有完全想明白)

 

1 loss_mse = tf.reduce_mean(tf.square(y_ - y))
 
2 totle_mse = sess.run(loss_mse, feed_dict={x: X, y_: Y_})
3 print(totle_mse, "\n")

loss_mse的计算代码中仅和 y_ 值有关,若将第二行代码修改为

totle_mse = sess.run(loss_mse, feed_dict={y_: Y_})

会报错

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [?,2]
     [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[?,2], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

开始意为是Y_值的求算与X有关

Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)] for (x1, x2) in X]

对Y_值进行修改,变成与X无关的变量。结果还是报同样的错误。

 

又仔细观察了报错说明(InvalidArgumentError )和位置(下图两个位置)。

初步推断可能是在进行会话运行时,必须对所有初始化变量中的placeholder 进行 feed a value

 2.2 自定义误差

采用均方误差时,只是建立产量-销量的关系,当且仅当成本 = 利润时,该关系模型才有可能实现利润最大化。

  • 预测多了( y ≥ y_ ),损失成本COST
  • 预测少了( y <y_ ),损失利润PROFIT

若建立成本-产量-销量-利润关系模型,实现利润最大化,同时人具体核算的任务量就会降低。

 

2.2.1 建立数学模型

自定义损失函数

(1)建立初步模型

 (2)模型细化

 

 (3)转化成Tensorflow语句

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

 

2.2.2 自定义损失函数的实例应用

一个单位量的酸奶成本COST为1元,利润PROFIT为9元

预测少一个单位量的酸奶则损失利润9元

预测多一个单位量的酸奶则损失利润1元

此时生成的函数应该是往多了的预测,也即倾向于 ‘ 微多 ’ 

注:下列代码仅修改了损失函数部分,在引入库部分增加了常量COST、PEROFIT赋值代码。 

# 第一步 导入模块,生成数据集
import tensorflow as tf
import numpy as np
BATCH_SIZE = 8
SEED = 23455
COST = 1
PROFIT = 9

rdm = np.random.RandomState(SEED)
# 拟为用32组数据训练神经网络,有2个特征参数
X = rdm.rand(32,2)
# 生成数据集标签,
# rdm.rand()函数返回值在0~1之间,确切地讲位于0.1~1之间,
# rdm.rand()/10.0-0.05的结果相对x1、x2来讲低一个量级,
# 这里表示仅对x1+x2的值微调。
Y_ = [[x1+x2+(rdm.rand()/10.0-0.05)] for (x1, x2) in X]

# 第二步 定义前向传播过程
# placeholder为喂入数据集及数据标签占位
x = tf.placeholder(tf.float32, shape=(None, 2))
y_ = tf.placeholder(tf.float32, shape=(None, 1))
# 生成前向传播时所需权重参数赋值,标准差stddev=1
# 由于该神经网络为一层,所以仅赋一个权重参数即可
w1= tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))
# 矩阵运算,两个矩阵乘积
y = tf.matmul(x, w1)

# 第三步 损失函数及反向传播过程
# 选用自定义损失函数作为条件
loss_user_def = tf.reduce_sum(tf.where(tf.greater(y,y_), COST*(y-y_), PROFIT*(y_ - y)))
# 选用梯度下降法作为权重优化函数
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss_user_def)

#第四步 生成会话,训练STEPS轮
with tf.Session() as sess:
    # 全局变量初始化
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    # 进行循环优化权重参数,20000轮
    STEPS = 20000
    for i in range(STEPS):
        # start为0、8、16、24
        start = (i*BATCH_SIZE) % 32
        # 每次喂入BATCH_SIZE数据量
        end = start + BATCH_SIZE
        # 执行数据训练过程,train_step权重优化函数,喂入数据集及对应标签
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]})
        
        # 每循环500次打印一下权重参数训练效果,
        if i % 500 == 0:
            print("After %d training steps, w1 is: " % (i))
            print(sess.run(w1), "\n")
            # 计算损失函数值,观察损失函数随训练次数的变化趋势
            totle_mse = sess.run(loss_user_def, feed_dict={x: X, y_: Y_})
            print(totle_mse, "\n")
    print("Final w1 is: \n", sess.run(w1))

运行结果(略),W1最终值 ‘ 略大’;成本低,利润高,多产些、浪费点无所谓。

[[1.0225189]
 [1.0416601]]

若将数值更变

COST = 9
PROFIT = 1

运行结果(略),W1最终值 ‘ 略小’;成本高,利润低,少产些、浪费点会增加成本。

 [[0.9661967 ]
 [0.97694933]]

2.3 交叉熵ce(Cross Entropy)

交叉熵表示两个概率分布之间的距离。

交叉熵越大,概率间距越远,两概率分布越相异;

交叉熵越小,概率间距越近,两概率分布越相似;

 (1)数学表达式:

(2)Tensorflow语句

ce = - tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-12, 1.0)))

备注:

为了保障tf.log有意义,当 y 值小于1e-12时,将 y 值 clip 为 1e-12,当 y 值大于 1 时,将 y 值 clip 为 1 。

示例:

在二分类问题方面,已知标准答案为y_ = (1,0),现有两个预测结果y1 = (0.6,0.4)、y2 = (0.8,0.2),那个结果更接近标准答案呢?

根据交叉熵ce公式计算得:

H1((1,0),(0.6,0.4)) = -(1*log0.6 + 0*log0.4)  ≈ -(-0.222 + 0) = 0.222

H2((1,0),(0.8,0.2)) = -(1*log0.8 + 0*log0.2)  ≈ -(-0.097 + 0) = 0.097

所有y2预测更准。

2.4 softmax 函数

2.4.1 函数的基本释义

摘录于维基百科 - Softmax函数

 softmax函数(也称为归一化指数函数)是逻辑函数的一种推广。

它能将一个含任意实数的 K 维向量 z "压缩"到另一个 k 维实向量 σ(z) 中,使得每一个元素的范围都在 (0,1) 之间,并且所有元素的和为 1 ,该函数(softmax函数)的形式通常按下面的式子给出:

 softmax函数实际上是有限项离散概率分布的梯度对数归一化。因此,softmax函数在包含多项逻辑回归、多项线性判别分析、朴素贝叶斯分类器和人工神经网络等的多种基于概率的多分类问题方法中都有着广泛应用。特别地,在多项逻辑回归和线性判别分析中,函数的输入是从 k 个 不同的线性函数得到的结果,而样本向量 x 属于第 j 个分类的概率为:

这可以被视作 k 个线性函数 x   |→   xTw1, . . . , x   |→   xTwk Softmax函数的复合(xTwxw)

2.4.2 函数的示例及代码诠释

输入向量 [1,2,3,4,1,2,3] 对应的Softmax函数的值为  [0.024,0.064,0.175,0.475,0.024,0.064,0.175] 。输出向量中拥有最大权重的项对应着输入向量中的最大值“4”。这也显示了这个函数通常的意义:对向量进行归一化,凸显其中最大的值并抑制远低于最大值的其他分量。

代码

下面是使用Python进行函数计算的示例代码:

import math
z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
z_exp = [math.exp(i) for i in z]  
print(z_exp)  # Result: [2.72, 7.39, 20.09, 54.6, 2.72, 7.39, 20.09] 
sum_z_exp = sum(z_exp)  
print(sum_z_exp)  # Result: 114.98 
softmax = [round(i / sum_z_exp, 3) for i in z_exp]
print(softmax)  # Result: [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]

Python使用numpy计算的示例代码:

import numpy as np
z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])
print(np.exp(z)/sum(np.exp(z)))

 

 2.4.3 Tensorflow中的实现形式

该部分是这个函数在本小节的重点,2.4.1 和 2.4.2 是辅助理解过程。

ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
cem = tf.reduce_mean(ce)

 2018-10-28 23:28:31 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络优化(二) - 激活函数和损失函数 的相关文章

  • numba 函数何时编译?

    我正在研究这个例子 http numba pydata org numba doc 0 15 1 examples html multi threading http numba pydata org numba doc 0 15 1 ex
  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • linux常用库 对应函数

    1 include
  • Vue在线引入地址

    Vue在线引入地址 vue2 vue3 CodePan在线运行ElementUI时添加的JS及CSS引用地址 Vue https cdn jsdelivr net npm vue 2 dist vue
  • 【Flink系列1】flink与spark的区别

    Flink简介 spark基本架构 flink基本架构 Spark提出的最主要抽象概念是弹性分布式数据集 RDD flink支持增量迭代计算 基于流执行引擎 Flink提供了诸多更高抽象层的API以方便用户编写分布式任务 1 DataSet
  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • 基于SpringBoot并整合MyBatis和Thymeleaf模板引擎开发的图书管理系统

    先展示下前端页面 登录页面 用户注册页面 一 管理员相关页面以及功能 管理员主页信息以及左侧导航栏 页头可查看当前管理员的信息
  • Unity Application.LoadLevel() 已过时

    解决办法 使用EditorSceneManager方法 https blog csdn net shenqiankk article details 100137502
  • 大数据技术——Scala语言基础

    Scala基础知识 控制结构 if条件表达式 有一点与Java不同的是 Scala中的if表达式的值可以赋值给变量 while循环 for循环 基本语法 其中 变量 lt 表达式 被称为 生成器 generator 守卫 guard 的表达
  • finereport连接oracle_FINEREPORT连接远程ORACLE数据库

    有如下错误提示 SEVERE CannotcreatePoolableConnectionFactory Listenerrefusedtheconnectionwiththefollowingerror ORA 12505 TNS lis
  • python小技巧大应用--基础实用漂亮界面(无边框,圆角,可拖拽)

    这回要实现一个漂亮的基础界面 要具有如下特色 无边框 圆角 漂亮的背景 可拖拽移动 具有最小化 关闭按钮 界面与代码分离 支持qss 先展示一下最后的效果 那就开始工作吧 1 通过Qt Designer实现界面设计 将设计好的界面保存为di
  • 【数据结构】设计循环队列详解

    我的个人主页 我们登上并非我们所选择的舞台 演出并非我们所选择的剧本 Enchiridion 设计循环队列 前言 1 什么是循环队列 2 循环队列的设计 2 1 MyCircularQueue k 实现 2 2 isEmpty 和 isFu
  • usb 命名乱的一批,怎么破

    USB 的命名真是乱的一批 命名里 一股浓浓的 印度风扑面而来 我想给 iso 文件加个驱动直接跪了 被绕进去了 幸运的是速度没乱 以下用速度整理该文档 USB2 0 时代 12 mbps usb1 0 480 mbps usb2 0 US
  • 什么是Restful?

    REST 简介 REST 是英文 Representational State Transfer 的缩写 有中文翻译为 具象状态传输 REST 这个术语是由 Roy Fielding 在他的博士论文 Architectural Styles
  • 大数据课程最后任务-hive处理数据

    好的这是第五次也就是不加额外挑战任务的最后任务 基本过程来自于厦门大学的hive教程 主要是hive处理20w的数据 两部分 一部分是安装 来自http dblab xmu edu cn blog 959 一步分是运行http dblab
  • Yii Framework 开发教程(34) Zii组件-AutoComplete示例

    CJuiAutoComplete 在用户输入时可以根据用户输入的前几个字符自动提示用户可以输入的文字 它封装了 JUI autocomplete插件 基本用法如下 php view plain copy print
  • vue3优雅实现移动端登录注册模块

    前言 近期开发的移动端项目直接上了vue3 新特性composition api确实带来了全新的开发体验 开发者在使用这些特性时可以将高耦合的状态和方法放在一起统一管理 并能视具体情况将高度复用的逻辑代码单独封装起来 这对提升整体代码架构的
  • VUE element-ui 之table表格表头插入输入框

    很简单
  • 手把手教你安装RabbitMQ(基于CentOS7系统)

    RabbitMQ简介及安装 什么是RabbitMQ RabbitMQ的特点 安装 安装Erlang 配置Erlang环境变量 验证环境 安装RabbitMQ 启动RabbitMQ 添加用户 访问 什么是RabbitMQ RabbitMQ是一
  • 财富自由?五年后为什么他月入十万,而我月入六千

    最近无论是在社群里还是 各种付费平台上 都能看到闪闪发光的一个词 财富自由 我好奇地去搜索了一下百度百科 财富自由是指 你无需为生活开销而努力 为钱工作的状态 简单的说 你的资产产生的被动收入 至少等于或超过你的日常开支 这是我们大多数人最
  • int、float和double的字节及位码

    int类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 32位 普通数值位 0 00000000 00000000000000000000001 flaot类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 3
  • 神经网络优化(二) - 激活函数和损失函数

    1 神经网络中的激活函数activation function 1 1 引入激活函数概念 神经网络的基本构成单元是神经元 在搭建神经网络一文中使用的神经元模型为 这个神经元模型是较为简化的基本神经元模型 还有一种理论模型包含有激活函数和偏置