深度学习中的核心知识

前向运算 & 反向传播

前向运算
计算输出值的过程称为前向传播

反向传播(Back Propagation,BP)
神经网络(参数模型)训练方法

  • 列表项目1986年由Rumelhar和Hinton等人提出
  • 解决了神经网络优化的问题
  • 计算输出层结果与真实值之间的偏差来进行逐帧调节参数

一个完整的神经网络包含了“网络结构”和“参数”两部分
网络结构定义了是什么样的层,层中包含着参数

对于网络结构的设计,其实就是超参数求解问题,超参数就是需要人为去定义的参数
目前已经存在大量的成熟网络结构,而网络结构优化的问题依然是学术和工业界探讨求解的问题

在网络结构已知的条件下,我们就需要BP算法对网络参数进行求解
具体是怎样求解的呢?就是以上所说的利用“计算输出层结果与真实值之间的偏差来进行逐帧调节参数”
在这里用到了梯度下降的算法,对于网络参数的求解是可以自动完成的
只不过我们需要输入“样本”,这里的样本就是有标签的数据,所以神经网络就是一个有监督的学习过程

目前在学术界和工业界也存在一些方法来完成自动化的网络结构设计,以及参数的求解
其中比较有代表性的就是Auto-ML以及NAS









- 阅读剩余部分 -

Log4j:
目的:输出一些日志记录,避免System.out.println的一些缺点。比如项目跑起来以后,有时候无法确定输出的是哪里的信息等。

logger:客户端依赖的输出对象
appender:定义输出到哪里,例如输出到控制台、文件里等
layout:定义输出的格式,与appender有关,每一个appender对应一个layout

logger有一个属性叫做名称(全路径类名)

Logger logger = Logger.getLogger(客户端类.class);
这个Logger对象的名称就是客户端类的全路径类名。

Level概念:级别,优先级
常用的级别:Debug < Info < Warn < Error < Fatal
不同的级别用于输出不同的信息。
Debug:输出调试信息,类似”System.out.println”.
Info:信息,可以提示用户
Warn:警告,信息不符合要求,但不影响程序运行
Error:错误,不符合要求,比较严重
Fatal:非常严重,出现后应停止整个程序,并予以解决

级别:用来进行统一和特殊的输出控制(更改配置文件的相关内容实现。改变rootLogger的级别来统一控制;需要特殊控制时,更改需要改变的具体包的logger的级别信息)

fileApppender:可以输出到一个指定的目录位置
RollingfileAppender:可以指定日志文件最大是多少字节

                 maxBackupIndex:最大输出多少个文件数,标号越小说明生成时间越新

DailyRollingfileAppender:每天生成一个不同的日志文件

配置输出的位置:
可以在项目初始化的时候设置
System.setProperty(“LOG_DIR”,”目标位置”);
在配置文件使用${LOG_DIR}

添加了相关jar包(log4j-1.2.16.jar)后,附一张试验效果图吧。
log4j.JPG

后面是一些CSS笔记:
CSS样式含义:
main.css:

text-align: text-align 属性规定元素中的文本的水平对齐方式。

border: 缩写边框属性设置在一个声明中所有的边框属性。
可以设置的属性分别(按顺序):border-width, border-style,和border-color.

margin: margin简写属性在一个声明中设置所有外边距属性。该属性可以有1到4个值。

background:url 背景图片地址

no-repeat 背景图片不重复显示(横向和竖各都不重复)

left top 背景图的位置是从元素的左上方开始显示

float属性指定一个盒子(元素)是否应该浮动。
注意: 绝对定位的元素忽略float属性!

line-height:设置以百分比计的行高

text-decoration:text-decoration 属性规定添加到文本的修饰。这个属性允许对文本设置某种效果,如加下划线。

padding:padding 简写属性在一个声明中设置所有内边距属性。

display:display 属性规定元素应该生成的框的类型。

overflow:overflow属性指定如果内容溢出一个元素的框,会发生什么。
visible:默认值,内容不会被修剪,但会呈现在元素之外
hidden:超出元素的部分不可见
scroll:内容会被修剪,但是显示滚动条以便查看其余的内容
auto:如果内容被修剪,则显示滚动条

clear:clear属性指定段落的左侧或右侧不允许浮动的元素。
both左右均不允许。left左,right右

关于美化暂时的想法是改造一些原来的样式文件,然后结合bootstrap制作相关的网页。论文目录的话,暂时准备先把所有的功能实现都列出来,然后再挑选一些重要的。

进度

已经完成了大部分内容(create-api原理分析)还剩打包就弄完了,
因为比较赶进度所以我就没整理完,做完后剩下的时间会从头开始再整理一遍思路因为我是从中间开始赶的进度,所以我会根据自己情况来分配着重看哪里

问题

收藏功能是用的query-string的库解决的,但是为什么能够本地缓存没有弄懂,

因为基础知识不牢固,自己找了java的基础课程来听。
目前进度:
基础视频看到了第五页,剩余两页大概47个小节,预计三天内可以完成。
之后计划重新过一下项目的参考视频,开始总结知识点,总结尽量在七天之内完成,力求弄懂每一句代码。
这个月将完成代码部分。

可能遇到的问题:
通过基础知识的学习来看,现在有信心掌握项目的代码部分,如果项目所需要的知识还是不够,将及时与老师联系寻求指导(三天)
以下是基础知识的学习收获:
输出控制符:
t 空出八个空格
n 换行

数据类型:
char 字符型
int 整型
double 双精度
String 字符串

声明变量:
数据类型,变量名称,变量的值、

逻辑运算符只能对布尔boolen类型的值操作

字符串做比较时使用 判断if(sex.equals("男")){

switch case案例常量 break跳出 default默认
重点:switch结构中小括号里只能出现int类型和char类型,case案例的个数可以随便定义但后面一定要跟常量

a>100 ? 200:500;成立时取200,不成立取500;

while 内部定义的变量不能在外部使用;do while 先执行再判断,起码执行一次

for(int i=0,j=number;i<=j;i++,j--)

Java中比较两个字符串是否相等,用equals() if(flag.equals("yes"))

continue的使用:跳过当前程序,直接执行下一次程序

比较break和continue{
使用场合:break可用于switch结构和循环结构中
continue只能用于循环结构中

作用(循环结构中):break语句终止某次循环,程序跳转到循环外的下一条语句
continue跳出本次循环,进入下一次循环
}

循环结构总结
区别1:语法
while循环: do-while循环 for循环
while(<条件>){ do{ for(初始化;条件;迭代){

//循环体            //循环体        //循环体

} }while(<条件>) }
区别2:执行顺序
while循环:先判断,再执行
do-while循环:先执行,再判断
for循环:先判断,再执行
区别3:适用情况
循环次数确定的情况,通常选用for循环
循环次数不确定的情况,通常选用while和do-while循环

System.out.println();不输入内容时只起到换行作用

JVM java虚拟机
java内存分四块
1.栈区:存放参数的函数值,局部变量
2.堆区:存放new创建的对象和数组
3.静态区
4.代码区

图片1.png

栈内存 堆内存
int a=9
int b;(b=9,指向已经创建的)
Scanner in new Scanner(System.in)

String[] arr =new String[5];
System.ot.println(arr[1]); //null为空

arr.length int型数组长度

Arrays.sort(arr);升序排列数组数据

Arrays.sort(arr);
for(int i=arr.length-1;i>=0;i--) {
System.out.println(arr[i]);
逆序输出字母

//冒泡排序 默认数组是升序排列

void 无参无返回

Person类中 eat()方法 name属性

类与对象
必须使用new关键词创建一个对象
使用对象属性(对象名,成员变量)
使用对象方法(对象名,方法名)、
同一个类的每个对象有不同的成员变量的存储空间
同一个类的每个对象共享该类的方法

图片2.png

Public int getAge(){} 注意:get即为取值的意思,set赋值

图片3.png

有参有返回时必须调用一个参数才能使用
例:public String print(String n,int a,char b) {
System.out.println("n"+n);
System.out.println("a"+a);
System.out.println("b"+b);
return "哈哈";
}
A.print("小明", 15, '男');调用需使用完整参数,返回一个String类型的值

局部变量(main主函数中定义)只声明不赋值会报错,
成员变量(在class类中定义的)不赋值显示为0或Null等

Java就近原则,相同名称的变量,靠近哪个用哪个

return关键字
返回方法指定类型的值(这个值是一定的)public int sleep(){} 这里返回一个常数 return 1;
结束方法的执行(仅仅一个return语句)

参数允许有多个,调用时也应有多个,需传多个实参进去(可见Test_can_shu.Java)
toString()方法(每个类的默认方法,用于把类以字符串显示)
1.在java中,所有的对象都有toString()这个方法。
2.创建类时没有定义toString方法输出对象时会输出对象的哈希码值(对象内存地址)
3.它通常只是为了方便输出,比System.out.println(XX),括号里面的“XX”如果不是String类型的话,就自动调用XX的toString()方法
4.它只是sun公司开发java的时候为了方便所有类的字符串操作二特意加入的一个方法
(可见toString.java)

this关键字(细节可见this_guan_jian_zi)
1.在类的方法定义中使用this关键字代表使用该方法的对象的引用
2.有时使用this可以处理方法中成员变量和参数重名的问题
3.this可以看作一个变量,他的值是当前对象的引用(this就等于该对象他本身)

面向对象三大基本特征之一封装(可见feng_zhuang.java)
1.封装(encapsulation)就是把不想或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开
2.做法:修改属性的访问权限来限制对属性的访问(private)。并为每一个属性创建一对取值方法(getGender)和赋值方法(setGender),用于对这些属性的访问。保证属性的合法。

方法的重载(可见chong_zai.java)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法,调用时会根据不同的参数列表选择相应的方法。

构造方法
1.没有构造方法时,自动构建一个构造方法Cat(){},
当有一个构造方法Cat(String name,int age),不能直接 Cat one=new Cat();
可以Cat two=new Cat(“小花”,18)
2.使用new + 构造方法 创建一个新的对象
3.构造函数是定义在java类中的一个用来初始化对象的函数
4.构造函数与类同名且没有返回值 student one=new student()

完成了一些java程序的练习

捕获1.PNG

捕获2.PNG

捕获3.PNG

目前已经完成了第九章卖家订单部分的学习,跟前面买家部分的时候一样遵循从DAO层到service层再到controller层的开发。
因为前面买家端写了很多代码所以很多代码就不用再重复写了,例如订单的dao层。
完成以后实现先微信登陆操作然后进入卖家管理系统,里面可以实现管理订单商品,修改列表,新增,类目的操作。
不过我是因为在买家微信支付部分遇到了困难所以我是跳过问题部分先写的卖家部分,
所以第七八章微信授权支付部分遇到很多问题
1首先因为订单支付需要微信公众号授权,而微信公众号的申请首先是一个问题,不过通过申请测试账号解决了
2然后是之前遇到的虚拟机修改ip商品信息依旧无法上传到前端的问题是因为防火墙设置,不允许8080端口的原因,通过关闭了防火墙顺利解决了。
3在将url地址从127.0.0.1改为自己设置的url时候无法访问,最后发现是没有修改hosts,将本机hosts修改以后完成了。
4成功难道授权以后需要将在手机上运行网站,需要通过抓包软件和在手机更改代理来实现,不然网站只能在电脑端运行。不过开始时候按照视频步骤完成,手机更改代理以后出现了无法通过本机连上网络抓包软件也没办法抓取信息。在我重启了抓包软件以后不知道为什么就可以了