神经网络(Nature Network)

news2025/1/16 20:55:49

最近接触目标检测较多,再此对最基本的神经网络知识进行补充,本博客适合想入门人工智能、其含有线性代数及高等数学基础的人群观看

1.构成

由输入层、隐藏层、输出层、激活函数、损失函数组成。

  • 输入层:接收原始数据
  • 隐藏层:进行特征提取和转换
  • 输出层:输出预测结果
  • 激活函数:非线性变换
  • 损失函数:衡量模型预测结果与真实值之间的差距

2.正向传播过程

​ 基础的神经网络如下图所示,其中层1为输入层,层2为隐藏层,层3为输出层:

神经网络

​ 每一个圆圈代表了一个神经元,各层的神经元各自相连,如图中的绿色箭头。每一条相连的绿线上拥有起始设定好的权重。隐藏层的神经元后跟着激活函数,进行信号的转变。

​ 对于每一层信号的输入输出,均有以下公式表达,X为此层的输入,O为此层的输出,一般输入层采用激活函数,即输入即为输出。
X = W ⋅ I n p u t O = s i g m o i d ( X ) X=W·Input\\ O=sigmoid(X) X=WInputO=sigmoid(X)
I n p u t Input Input 为输入矩阵,此处以如下为例:
I n p u t = [ 1.0 0.5 0.35 ] Input = \begin{bmatrix} 1.0\\ 0.5\\ 0.35 \end{bmatrix} Input= 1.00.50.35
W W W 为权重矩阵,各层的权重各不相同
W = [ w 1.1 w 1.2 w 1.3 w 2.1 w 2.2 w 2.3 w 3.1 w 3.2 w 3.3 ] W= \begin{bmatrix} w_{1.1} & w_{1.2} &w_{1.3}\\ w_{2.1} & w_{2.2} &w_{2.3}\\ w_{3.1} & w_{3.2} &w_{3.3} \end{bmatrix} W= w1.1w2.1w3.1w1.2w2.2w3.2w1.3w2.3w3.3
s i g m o i d sigmoid sigmoid 为激活函数
y = 1 1 + e − x y=\frac{1}{1+e^{-x}} y=1+ex1

过程演示(3层)

1.输入层: 由于输入层一般不使用激活函数,输入层的输出即为输入数据 I n p u t Input Input

2.隐藏层: 此层的输入为:
X h i d d e n = W i n p u t 2 h i d d e n ⋅ I n p u t = [ w 1.1 w 1.2 w 1.3 w 2.1 w 2.2 w 2.3 w 3.1 w 3.2 w 3.3 ] ⋅ [ 1.0 0.5 0.35 ] X_{hidden}=W_{input2hidden} · Input= \begin{bmatrix} w_{1.1} & w_{1.2} &w_{1.3}\\ w_{2.1} & w_{2.2} &w_{2.3}\\ w_{3.1} & w_{3.2} &w_{3.3} \end{bmatrix} · \begin{bmatrix} 1.0\\ 0.5\\ 0.35 \end{bmatrix} Xhidden=Winput2hiddenInput= w1.1w2.1w3.1w1.2w2.2w3.2w1.3w2.3w3.3 1.00.50.35
​ 此层的输出为:
O h i d d e n = s i g m o i d ( X h i d d e n ) = 1 1 + e X h i d d e n O_{hidden} = sigmoid(X_{hidden})=\frac{1}{1+e^{X_{hidden}}} Ohidden=sigmoid(Xhidden)=1+eXhidden1
3.输出层: 输出层永远不使用激活函数,输出层的输出即为输入,输出层的输入为:
X o u t p u t = W h i d d e n 2 o u t p u t ⋅ O h i d d e n X_{output} = W_{hidden2output}·O_{hidden} Xoutput=Whidden2outputOhidden

3.激活函数

​ 上文使用的是 s i g m o i d sigmoid sigmoid函数作为激活函数,还可以将其根据具体应用,更换为以下函数:

  • Sigmoid函数:将输入值压缩到0到1之间,常用于二分类问题

sigmoid

  • ReLU函数:将负值置为0,常用于深度神经网络中
    ReLU
  • Tanh函数:将输入值压缩到-1到1之间,常用于回归问题

tanh

  • Leaky ReLU函数:对负值进行微小的缩放,避免梯度消失问题

Leaky ReLU

4.反向传播过程

​ 误差计算:目标值-实际值 e n = t n − o n e_n = t_n - o_n en=tnon

​ 下面以单个神经元返回误差为例:
bp传播

​ 对于最后输出的误差我们需要将他根据前一层的权重传播到前一层,以上面单个神经元的反向传播过程为例。传回1号神经元的误差为 e r r o r s ⋅ w 1 w 1 + w 2 errors·\frac{w_1}{w_1+w_2} errorsw1+w2w1 ,传回2号神经元的误差为 e r r o r s ⋅ w 2 w 1 + w 2 errors·\frac{w_2}{w_1+w_2} errorsw1+w2w2

过程演示(3层)

​ 下面我们把这个过程放到三层的神经网络中分析:

反向传播

​ 我们以第二层第一个神经元为例,分析误差传播到此的值。
e h i d d e n 1 = e o u t p u t 1 ⋅ w 1.1 w 1.1 + w 2.1 + w 3.1 + e o u t p u t 2 ⋅ w 1.2 w 1.2 + w 2.2 + w 3.2 + e o u t p u t 3 ⋅ w 1.3 w 1.3 + w 2.3 + w 3.3 e_{hidden1} = e_{output1}·\frac{w_{1.1}}{w_{1.1}+w_{2.1}+w_{3.1}}+e_{output2}·\frac{w_{1.2}}{w_{1.2}+w_{2.2}+w_{3.2}}+e_{output3}·\frac{w_{1.3}}{w_{1.3}+w_{2.3}+w_{3.3}} ehidden1=eoutput1w1.1+w2.1+w3.1w1.1+eoutput2w1.2+w2.2+w3.2w1.2+eoutput3w1.3+w2.3+w3.3w1.3
​ 接下来我们使用矩阵来表达这个麻烦的公式:

输出层误差:
e r r o r o u t p u t = ( e 1 e 2 e 3 ) error_{output}=\begin{pmatrix} e_1\\ e_2\\ e_3 \end{pmatrix} erroroutput= e1e2e3
隐藏层误差:
e r r o r h i d d e n = [ w 1.1 w 1.1 + w 2.1 + w 3.1 w 1.2 w 1.2 + w 2.2 + w 3.2 w 1.3 w 1.3 + w 2.3 + w 3.3 w 2.1 w 1.1 + w 2.1 + w 3.1 w 2.2 w 1.2 + w 2.2 + w 3.2 w 2.3 w 1.3 + w 2.3 + w 3.3 w 3.1 w 1.1 + w 2.1 + w 3.1 w 3.2 w 1.2 + w 2.2 + w 3.2 w 3.3 w 1.3 + w 2.3 + w 3.3 ] ⋅ e r r o r o u t p u t error_{hidden}=\begin{bmatrix} \frac{w_{1.1}}{w_{1.1}+w_{2.1}+w_{3.1}} &\frac{w_{1.2}}{w_{1.2}+w_{2.2}+w_{3.2}} &\frac{w_{1.3}}{w_{1.3}+w_{2.3}+w_{3.3}}\\ \frac{w_{2.1}}{w_{1.1}+w_{2.1}+w_{3.1}} &\frac{w_{2.2}}{w_{1.2}+w_{2.2}+w_{3.2}} &\frac{w_{2.3}}{w_{1.3}+w_{2.3}+w_{3.3}}\\ \frac{w_{3.1}}{w_{1.1}+w_{2.1}+w_{3.1}} &\frac{w_{3.2}}{w_{1.2}+w_{2.2}+w_{3.2}} &\frac{w_{3.3}}{w_{1.3}+w_{2.3}+w_{3.3}}\\ \end{bmatrix} · error_{output} errorhidden= w1.1+w2.1+w3.1w1.1w1.1+w2.1+w3.1w2.1w1.1+w2.1+w3.1w3.1w1.2+w2.2+w3.2w1.2w1.2+w2.2+w3.2w2.2w1.2+w2.2+w3.2w3.2w1.3+w2.3+w3.3w1.3w1.3+w2.3+w3.3w2.3w1.3+w2.3+w3.3w3.3 erroroutput
去归一化:
e r r o r h i d d e n = [ w 1.1 w 1.2 w 1.3 w 2.1 w 2.2 w 2.3 w 3.1 w 3.2 w 3.3 ] ⋅ e r r o r o u t p u t = w h i d d e n 2 o u t p u t ⋅ e r r o r o u t p u t error_{hidden}=\begin{bmatrix} w_{1.1} & w_{1.2} & w_{1.3}\\ w_{2.1} & w_{2.2} & w_{2.3}\\ w_{3.1} & w_{3.2} & w_{3.3} \end{bmatrix} · error_{output} = w_{hidden2output}·error_{output} errorhidden= w1.1w2.1w3.1w1.2w2.2w3.2w1.3w2.3w3.3 erroroutput=whidden2outputerroroutput

5.更新权重

​ 下一步需要取得误差最小的权重作为最优权重,在此我们使用梯度下降的方法找到误差最小时的权重。

梯度下降: 用于计算函数的最小值。随机起始点,通过导数的正负判断方向,朝着函数减小的方向,一步步增加x,并计算他的导数当导数为零或为设定范围内,取得最小值;否则继续增加。

​ 在神经网络中由于x为权重矩阵,我们使用的梯度下降为多维梯度下降。

设定误差函数

​ 在此例中我们使用 E = ( t n − o n ) 2 E = (t_n-o_n)^2 E=(tnon)2

误差函数的斜率

∂ E ∂ w i j = ∂ ∂ w i j ∑ n ( t n − o n ) 2 \frac{\partial E}{\partial w_{ij}}=\frac{\partial}{\partial w_{ij}}\sum_n(t_n-o_n)^2 wijE=wijn(tnon)2

由于在这里 o n o_n on​ 仅取决于连接着的权重,所以误差函数的斜率可以改写为:
∂ ∂ w i j ( t n − o n ) 2 \frac{\partial}{\partial w_{ij}}(t_n-o_n)^2 wij(tnon)2
根据导数的链式法则,我们改写斜率函数:
∂ E ∂ w i j = ∂ E ∂ o n × ∂ o n ∂ w i j = − 2 ( t n − o n ) ∂ o n ∂ w i j \frac{\partial E}{\partial w_{ij}}=\frac{\partial E}{\partial o_n}\times \frac{\partial o_n}{\partial w_{ij}}=-2(t_n-o_n)\frac{\partial o_n}{\partial w_{ij}} wijE=onE×wijon=2(tnon)wijon
我们再将 o n o_n on带入到此函数 o n = s i g m o i d ( ∑ j w j , k ⋅ o j ) o_n=sigmoid(\sum_j w_{j,k}·o_j) on=sigmoid(jwj,koj) o j o_j oj为前一层的输出,得到函数如下:
斜率函数 = − 2 ( t n − o n ) ∂ ∂ w i , j s i g m o i d ( ∑ j w j k ⋅ o j ) 斜率函数 = -2(t_n-o_n)\frac{\partial}{\partial w_{i,j}}sigmoid(\sum_j w_{jk}·o_j) 斜率函数=2(tnon)wi,jsigmoid(jwjkoj)
我们对sigmoid函数进行微分:
∂ s i g m o i d ( x ) ∂ x = s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) \frac{\partial sigmoid(x)}{\partial x} = sigmoid(x)(1-sigmoid(x)) xsigmoid(x)=sigmoid(x)(1sigmoid(x))
我们再把它放到斜率函数之中:
斜率函数 = − 2 ⋅ ( t n − o n ) ⋅ s i g m o i d ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − ∑ j w j k ⋅ o j ) ⋅ ∂ ∂ w i . j ( ∑ j w j k ⋅ o j ) = − 2 ⋅ ( t n − o n ) ⋅ s i g m o i d ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − ∑ j w j k ⋅ o j ) ⋅ o j 斜率函数=-2·(t_n-o_n)·sigmoid(\sum_jw_{jk}·o_j)·(1-\sum_jw_{jk}·o_j)·\frac{\partial }{\partial w_{i.j}}(\sum_jw_{jk}·o_j)\\ =-2·(t_n-o_n)·sigmoid(\sum_jw_{jk}·o_j)·(1-\sum_jw_{jk}·o_j)·o_j 斜率函数=2(tnon)sigmoid(jwjkoj)(1jwjkoj)wi.j(jwjkoj)=2(tnon)sigmoid(jwjkoj)(1jwjkoj)oj
由于在此过程中我们只需判断斜率方向,我们可以把常数去除,即:
斜率函数 = − ( t n − o n ) ⋅ s i g m o i d ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − ∑ j w j k ⋅ o j ) ⋅ o j 斜率函数=-(t_n-o_n)·sigmoid(\sum_jw_{jk}·o_j)·(1-\sum_jw_{jk}·o_j)·o_j 斜率函数=(tnon)sigmoid(jwjkoj)(1jwjkoj)oj
我们根据已有的关系对斜率在此修改:

  • ( t n − o n ) (t_n - o_n) (tnon) ( 目标值 − 实际值 ) (目标值-实际值) (目标值实际值),即 e i e_i ei
  • ∑ i w i , j ⋅ o i \sum_i w_{i,j}·o_i iwi,joi 为进入上一层的输入
  • o i o_i oi 为上一层的输出

∂ E ∂ w i j = − e i ⋅ s i g m o i d ( ∑ i w i j o i ) ⋅ ( 1 − s i g m o i d ( ∑ i w i j o i ) ) ⋅ o i \frac{\partial E}{\partial w_{ij}}=-e_i \cdot sigmoid(\sum_i w_{ij}o_i)\cdot (1-sigmoid(\sum_i w_{ij}o_i))\cdot o_i wijE=eisigmoid(iwijoi)(1sigmoid(iwijoi))oi

更新权重

​ 有了误差函数的斜率,我们就可以通过梯度下降的方式更新权重,其中 α \alpha α为设定好的学习率:
W n e w = W o l d − α ∂ E ∂ w i j W_{new} = W_{old}-\alpha \frac{\partial E}{\partial w_{ij}} Wnew=WoldαwijE

权重的矩阵变化

Δ w i j = α ⋅ E k ⋅ o k ⋅ ( 1 − o k ) ⋅ o j \Delta w_{ij} = \alpha \cdot E_k \cdot o_k \cdot (1-o_k) \cdot o_j Δwij=αEkok(1ok)oj

6.代码实现

神经网络代码应该由三部分组成:初始化函数、训练函数、查询函数

  • 初始化函数:应该包含各层的节点数,学习率,随机权重矩阵以及激活函数
  • 训练函数:应该包含正、反向传播,权重更新
  • 查询函数:正向传播过程
import numpy.random
import scipy.special

# 激活函数设置
def activation_function(x):
    return scipy.special.expit(x)

# 神经网络类
class NeuralNetwork:
    # 初始化函数
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        # 输入层、隐含层、输出层节点数
        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes
        # 学习率
        self.lr = learningrate
        # 随机权重矩阵
        self.Wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
        self.Who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
        # 激活函数
        self.activation_function = activation_function
        pass

    # 训练函数
    def train(self, inputs_list, targets_list):
        # 输入的目标list改为2D数组
        targets = numpy.array(targets_list, ndmin=2).T
        # 第一步计算结果(与query一致)
        inputs = numpy.array(inputs_list, ndmin=2).T
        hidden_inputs = numpy.dot(self.Wih, inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        final_inputs = numpy.dot(self.Who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)

        # 计算输出层误差 error_output = 目标值 - 测量值
        output_errors = targets - final_outputs
        # 计算隐含层误差 errors_hidden = w_hidden2output^T · errors_output
        hidden_errors = numpy.dot(self.Who.T, output_errors)

        # 权重更新
        self.Who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)),
                                        numpy.transpose(hidden_outputs))
        self.Wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),
                                        numpy.transpose(inputs))
        pass

    # 查询函数
    def query(self, inputs_list):
        # 输入的list改为2D数组
        inputs = numpy.array(inputs_list, ndmin=2).T
        # 隐含层的输入 hidden_inputs = w_input2hedden · inputs
        hidden_inputs = numpy.dot(self.Wih, inputs)
        # 隐含层的输出 hidden_outputs = sigmoid(hidden_inputs)
        hidden_outputs = self.activation_function(hidden_inputs)
        # 输出层的输入
        final_inputs = numpy.dot(self.Who, hidden_outputs)
        # 输出层的输出
        final_outputs = self.activation_function(final_inputs)
        return final_outputs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1442286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c#安全-nativeAOT

文章目录 前记AOT测试反序列化Emit 前记 JIT\AOT JIT编译器(Just-in-Time Complier),AOT编译器(Ahead-of-Time Complier)。 AOT测试 首先编译一段普通代码 using System; using System.Runtime.InteropServices; namespace co…

Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(三)

八、ui窗体创建要点 .h文件定义(popwindowf.h)&#xff0c; TEST_TYPE_WINDOW宏是要创建的窗口样式。 #pragma once #include <gtk/gtk.h> G_BEGIN_DECLS #define TEST_TYPE_WINDOW (test_window_get_type()) G_DECLARE_FINAL_TYPE (TestWindow, test_window, TEST, WI…

专业140+总分420+河海大学863信号与系统考研经验电子信息通信与信息技术,真题,大纲,参考书。

今年的成绩出来倍感欣慰&#xff0c;决定考研的时候并没有想到自己可以考出420的分数&#xff0c;通过自己一年来的努力&#xff0c;成功上岸&#xff0c;期中专业课863信号与系统140接近满分&#xff08;非常感谢信息通信Jenny老师的专业课辅导和平时悉心答疑&#xff0c;不厌…

Zoho Mail企业邮箱商业扩展第3部分:计算财务状况

在Zoho Mail商业扩展系列的压轴篇章中&#xff0c;王雪琳利用Zoho Mail的集成功能成功地完成了各项工作&#xff0c;并顺利地建立了自己的营销代理机构。让我们快速回顾一下她的成功之路。 一、使用Zoho Mail成功方法概述 首先她通过Zoho Mail为其电子邮件地址设置了自定义域…

入门指南|Chat GPT 的兴起:它如何改变数字营销格局?

随着数字营销的不断发展&#xff0c;支持数字营销的技术也在不断发展。OpenAI 的 ChatGPT 是一项备受关注的突破性工具。凭借其先进的自然语言处理能力&#xff0c;ChatGPT 已被证明是全球营销人员的宝贵资产。在这份入门指南中&#xff0c;我们将探讨Chat GPT对数字营销专家及…

文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题

六、用go语言&#xff0c;说明如何来维护一个支持操作MIN-GAP的一些数的动态集Q&#xff0c;使得该操作能给出Q中两个最接近的数之间的差值。例如&#xff0c;Q(1&#xff0c;5&#xff0c;9&#xff0c;15&#xff0c;18&#xff0c;22)&#xff0c;则MIN-GAP返回18-153&#…

发文新思路!双流卷积!CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的故障识别程序!直接运行!

适用平台&#xff1a;Matlab2023版本及以上 本程序参考中文EI期刊《电力自动化设备》2023年12月29号网络首发文献&#xff1a;《基于格拉姆角场与并行CNN的并网逆变器开关管健康诊断》,此外&#xff0c;在此基础上进一步对模型进行多重改进&#xff0c;每个人都可以构造属于自…

幻兽帕鲁服务器创建私服教程(新版教程更简单)

幻兽帕鲁官方服务器不稳定&#xff1f;自己搭建幻兽帕鲁服务器&#xff0c;低延迟、稳定不卡&#xff0c;目前阿里云和腾讯云均推出幻兽帕鲁专用服务器&#xff0c;腾讯云直接提供幻兽帕鲁镜像系统&#xff0c;阿里云通过计算巢服务&#xff0c;均可以一键部署&#xff0c;鼠标…

二维差分---三维差分算法笔记

文章目录 一.二维差分构造差分二维数组二维差分算法状态dp求b[i][j]数组的二维前缀和图解 二.三维前缀和与差分三维前缀和图解:三维差分核心公式图解:模板题 一.二维差分 给定一个原二维数组a[i][j],若要给a[i][j]中以(x1,y1)和(x2,y2)为对角线的子矩阵中每个数都加上一个常数…

金融信贷风控评分卡模型

评分卡模型概念 评分模型是根据借款人的历史数据&#xff0c;选取不同维度的数据类型&#xff0c;通过计算而得出的对借款人信用情况打分的模型。不同等级的信用分数代表了借款人信用情况的好坏&#xff0c;以此来分析借款人按时还款的可能性。 评分卡模型分类 A卡&#xff…

【linux系统体验】-archlinux折腾日记

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化 三、问题总结3.1 终端中文乱码 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…

过渡效果的艺术:CSS transition 让网页交互更平滑(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

JavaWeb:调出Maven面板

问题描述 情况说明&#xff1a;IDEA中找不到Maven面板&#xff0c;Maven面板如下图所示&#xff1a; 解决方案 选择 View > Appearance > Tool Window Bars&#xff1a; 然后就会出现Maven面板了。

5G技术对物联网的影响

随着数字化转型的加速&#xff0c;5G技术作为通信领域的一次重大革新&#xff0c;正在对物联网&#xff08;IoT&#xff09;产生深远的影响。对于刚入行的朋友们来说&#xff0c;理解5G技术及其对物联网应用的意义&#xff0c;是把握行业发展趋势的关键。 让我们简单了解什么是…

力扣hot100 -- 双指针

目录 &#x1f382;移动零 &#x1f319;盛最多水的容器 &#x1f33c;三数之和 &#x1f33c;接雨水 前缀和 辅助数组 双指针 单调栈 &#x1f382;移动零 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 关于swap #include <iostream> #include <vec…

FastJson、Jackson使用AOP切面进行日志打印异常

FastJson、Jackson使用AOP切面进行日志打印异常 一、概述 1、问题详情 使用FastJson、Jackson进行日志打印时分别包如下错误&#xff1a; 源码&#xff1a; //fastjon log.info("\nRequest Info :{} \n"&#xff0c; JSON.toJSONString(requestInfo)); //jackson …

ubuntu22.04安装部署03: 设置root密码

一、前言 ubuntu22.04 安装完成以后&#xff0c;默认root用户是没有设置密码的&#xff0c;需要手动设置。具体的设置过程如下文内容所示&#xff1a; 相关文件&#xff1a; 《ubuntu22.04装部署01&#xff1a;禁用内核更新》 《ubuntu22.04装部署02&#xff1a;禁用显卡更…

剑指offer——二维数组中的查找(杨氏矩阵)

目录 1. 题目描述2. 常见错误思路3. 分析3.1 特例分析3.2 规律总结 4. 完整代码 1. 题目描述 在一个二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&…

黄金交易策略(Nerve Nnife):大K线对技术指标的影响

我们使用heiken ashi smoothed来做敏感指标&#xff08;大趋势借助其转向趋势预判&#xff0c;但不是马上转变&#xff09;&#xff0c;has默认使用6根k线的移动平均值来做计算的。若在6根k线规范内有一个突变的行情&#xff08;k线很长&#xff09;&#xff0c;那么整个行情的…

基于鲲鹏服务器的LNMP配置

基于鲲鹏服务器的LNMP配置 系统 Centos8 # cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 卸载已经存在的旧版本的安装包 # rpm -qa | grep php #查看已经安装的PHP旧版本# rpm -qa | grep php | xargs rpm -e #卸载已经安装的旧版&#xff0c;如果提示有…