Redis从认识安装到实现CURD

Redis从一无所知,到知道一点点

17955338-d235f7ce343b3ed6
image

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库 ——维基百科

可以简单的说,Redis就是一款高性能的NoSQL数据库

什么是NoSQL?

我们前面所学习的MySQL数据库是典型的的SQL数据库也就是传统的关系型数据库,而我们今天学习的Redis数据库则是一款NoSQL数据库,也叫作非关系型数据库,它与我们熟悉的MySQL等的概念完全是不一样的,它是一项全新的数据库理念,我们帖一组百度百科的解释

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题 ——百度百科

说明:我们现在所看到的的博客,RSS,P2P,微博,抖音等均属于 Web2.0的产物,Web2.0相比较过去的Web1.0更加注重于用户的交互,用户不仅可以浏览,还可以上传一些资源到网站上,例如图片文字或者说短视频等,使得用户也参与到了网站内容的制造中去了

为什么使用NoSQL?

  1. 部署成本低:部署操作简单,以开源软件为主
  2. 存储格式丰富:支持 key-value形式、文档、图片等众多形式,包括对象或者集合等格式
  3. 速度快:数据存储在缓存中,而不是硬盘中,而且例如Redis基于键值对,同时不需要经过SQL层解析,性能非常高
  4. 无耦合性,易扩展
    • 在SQL中,一个正在使用的数据是不允许删除的,但NoSQL却可以操作

NoSQL可以替代SQL吗?

有人会说,NoSQL = Not SQL ,但是我更倾向这样理解 NoSQL = Not only SQL ,我们不能以一个绝对的结论来判定两项技术的好坏,每一项技术的产生都有其特定的原因,在我看来,NoSQL更适合作为SQL数据库的补充,由于海量数据的出现,性能的要求高了起来,而NoSQL这种产物,对于结构简单但是数据量大的数据处理起来要比传统的SQL快很多,但是同样的,其逻辑运算就必须很简单,否则它也是力不从心的

在我看来,可以简单的说,NoSQL就是以功能换取性能,但是需要处理复杂的业务逻辑还需要使用关系型数据库,所以说想要在模型中完全用NoSQL替代SQL是不现实的,两者更像是互补的关系

SQL的好处:

  1. 支持在一个表以及多表之前进行复杂的查询操作
  2. 支持对事物的处理,能保证数据的安全要求
  3. 学习成本低,资料较多

市面上的NoSQL产品非常多,我们今天所要介绍的就是其中一款基于键值存储的数据库——Redis

初识Redis

我们在一开始提到了,Redis就是一款高性能的NoSQL数据库,那么它的应用场景是什么呢?

  • 用于用户内容缓存,可以处理大量数据的高访问负载,例如:数据查询,新闻,商品内容

  • 任务队列,例如:秒杀,12306

  • 在线好友列表

  • 应用、网站访问统计排行

由于其基于键值存储,那么可以支持的存储的类型有什么呢?

  • 字符串类型 - String

  • 列表 - list:linkedlist

  • 集合 - set

  • 有序集合 - sortedset

  • 哈希 - hash:map

下载安装

linux

官网:https://redis.io

由于官网访问速度过慢,我们可以访问对应的中文网:http://www.redis.net.cn

下载,解压,编译:

$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
$ tar xzf redis-5.0.4.tar.gz
$ cd redis-5.0.4
$ make

二进制文件是编译完成后在src目录下. 运行如下:

$ src/redis-server

你能使用Redis的内置客户端进行进行redis代码的编写,例如我们存入一个键值 name-zhangsan

$ src/redis-cli
redis> set name zhangsan
OK
redis> get name
"zhangsan"

windows

我们可以去github中寻找windows版本,不过版本会有所滞后

https://github.com/microsoftarchive/redis/releases

解压即可用

  • redis-server.exe:redis服务器端

  • redis-cli.exe:redis的客户端

  • redis.windows.conf:配置文件

常见支持类型—存取删除命令操作

(一) 字符串类型 - String
(1) 存储
  • set key value
- 127.0.0.1:6379> set address beijing
- OK
(2) 获取
  • get key
- 127.0.0.1:6379> get address
- “beijing”
(2) 删除
  • del key
- 127.0.0.1:6379> del address
- (integer) 1
(二) 列表类型 - list

添加一个元素到列表的头部(左边)或者尾部(右边)

(1) 添加
  • lpush key value:将元素添加到列表左边
  • Rpush key value:将元素添加到列表右边
127.0.0.1:6379> lpush listDemo zhangsan
(integer) 1
127.0.0.1:6379> lpush listDemo lisi
(integer) 2
127.0.0.1:6379> rpush listDemo wangwu
(integer) 3
(2) 获取:lrange key start end
  • 127.0.0.1:6379> lrange listDemo 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
(2) 删除
  • lpop key:删除列表最左边的元素,且返回元素
  • rpop key:删除列表最右边的元素,且返回元素
(三) 集合类型 - set

set:String 类型的无序集合,且元素不能重复

(1) 存储
  • sadd key value
127.0.0.1:6379> sadd setDemo aaa
(integer) 1
127.0.0.1:6379> sadd setDemo aaa
(integer) 0
(2) 获取
  • smembers key:获取set集合中的所有元素
127.0.0.1:6379> smembers setDemo
1) "aaa“
(2) 删除
  • srem key value:删除set集合中某元素
127.0.0.1:6379> srem setDemo aaa
(integer) 1
(四) 有序集合类型 - sortedset

sortedset 和 set 一样也是 string 类型元素的集合,且不允许重复的元素

不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序

有序集合的成员是唯一,但分数(score)却可以重复

(1) 存储
  • zadd key score value
127.0.0.1:6379> zadd sortedsetDemo 20 zhangsan
(integer) 1
127.0.0.1:6379> zadd sortedsetDemo 10 lisi
(integer) 1
127.0.0.1:6379> zadd sortedsetDemo 60 wangwu
(integer) 1
(2) 获取
  • zrange key start end [withscores]
127.0.0.1:6379> zrange sortedsetDemo 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
(2) 删除
  • zrem key value
127.0.0.1:6379> zrem sortedsetDemo wangwu
(integer) 1
(五) 哈希类型 - hash
(1) 存储
  • hset key field value
127.0.0.1:6379> hset hashDemo username admin
(integer) 1
127.0.0.1:6379>  hset hashDemo password admin
(integer) 1
(2) 获取
  • hget key field:获取指定的field对应的值
127.0.0.1:6379> hget hashDemo password
"admin"
  • hgetall key:获取所有的field和value
127.0.0.1:6379> hgetall hashDemo
1) "username"
2) "admin"
3) "password"
4) "admin"
(2) 删除
  • hdel key field
127.0.0.1:6379> hdel hashDemo username
(integer) 1

数据持久化

开篇已经讲过,Redis是一个内存数据库,也就是说,我们的数据全部存储在内存中,而我们常见的MySQL和Oracle等SQL数据库会将数据存储到硬盘中,凡事都是有利有弊,虽然内存数据库读写速度要比在硬盘中读写的数据库快的多,但是却出现了一个很麻烦的问题,也就是说,当 Redis 服务器重启或者宕机后,内存中的数据会全部丢失,为了解决这个问题,Redis提供了一种持久化的技术,也就是将内存中的数据存储到硬盘中去,日后方便我们使用这些文件恢复数据库中的数据

RDB 方式 (默认方式)

RDB:一定的时间内,检测key的变化情况,然后持久化数据

我们想要配置它,需要编辑 redis.windows.conf 配置文件

# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#   ......省略部分

save 900 1
save 300 10
save 60 10000

我们需要修改的就是最后三行,前面的说明的意思是,如果给定的秒数和给定的对数据库的写操作数同时发生,那么将保存数据库,也就是说,它的配置是根据save后面的两个数字,根据说明可知,第一个数字代表间隔时间,第二个数代表操作数据的数量

例如第一个 save 900 1 ,就是说每900秒且,至少一个 key 被改变则保存数据

我们根据自己具体项目的需要设置好后,需要重新启动Redis的服务器,并且我们需要指定配置文件,我们先指向到Redis指定目录下, 然后输入命令 redis-server.exe redis.windows.conf

例如我本地:D:\Tools\Redis-x64-3.2.100>redis-server.exe redis.windows.conf

AOF 方式

AOF:每一次操作后,就持久化数据

我们同样可以在 redis.windows.conf 文件配置

我们找到这一行

appendonly no no代表关闭aof,改为yes代表开启

还有这一行

# appendfsync no:不进行持久化

我们可以修改 no 位置的值

  • appendfsync always:每一次操作都进行持久化
  • appendfsync everysec:每隔一秒进行一次持久化

Jedis - Java中操作Redis数据库

Jedis is a blazingly small and sane Redis java client.

Jedis was conceived to be EASY to use.

Jedis 是一款可以让我们在java中操作redis数据库的工具,下载其jar包导入即可,使用还是非常简单的

(一) 字符串类型 - String
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();

//存储
jedis.set("address","beijing");

//获取
String address = jedis.get("address");

//关闭连接
jedis.close();

补充:setex() 方法可以存储数据,并且指定过期时间

//将aaa-bbb存入,且10秒后过期
jedis.setex("aaa",10,"bbb")
(二) 列表类型 - list
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();

//存储
jedis.lpush("listDemo","zhangsan","lisi","wangwu");//从左
jedis.rpush("listDemo","zhangsan","lisi","wangwu");//从右
    
//获取
List<String> mylist = jedis.lrange("listDemo", 0, -1);
            
//删除,并且返回元素
String e1 = jedis.lpop("listDemo");//从左
String e2 = jedis.rpop("listDemo");//从右

//关闭连接
jedis.close();
(三) 集合类型 - set
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();

//存储
jedis.sadd("setDemo","zhangsan","lisi","wangwu");

//获取
Set<String> setDemo = jedis.smembers("setDemo");

//关闭连接
jedis.close();
(四) 有序集合类型 - sortedset
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();

//存储
jedis.zadd("sortedsetDemo",20,"zhangsan");
jedis.zadd("sortedsetDemo",10,"lisi");
jedis.zadd("sortedsetDemo",60,"wangwu");
    
//获取
Set<String> sortedsetDemo = jedis.zrange("sortedsetDemo", 0, -1);

//关闭连接
jedis.close();
(五) 哈希类型 - hash
//获取连接,空构造代表默认值 "localhost",6379端口
Jedis jedis = new Jedis();

//存储
jedis.hset("hashDemo","name","lisi");
jedis.hset("hashDemor","age","20");
    
//获取
String name = jedis.hget("hashDemo", "name");

//获取所有数据
Map<String, String> user = jedis.hgetAll("hashDemo");
    

Set<String> keySet = user.keySet();
for (String key : keySet) {
    //获取value
    String value = user.get(key);
    System.out.println(key + ":" + value);
}

//关闭连接
jedis.close();

Jedis 连接池

为什么我们要使用连接池呢?

我们要使用Jedis,必须建立连接,我们每一次进行数据交互的时候,都需要建立连接,Jedis虽然具有较高的性能,但建立连接却需要花费较多的时间,如果使用连接池则可以同时在客户端建立多个连接并且不释放,连接的时候只需要通过一定的方式获取已经建立的连接,用完则归还到连接池,这样时间就大大的节省了

//创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
        
//创建Jedis连接池对象
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        
//获取连接
Jedis jedis = jedisPool.getResource();

//使用
jedis.set("setDemo","zhangsan");

//关闭 归还到连接池中
jedis.close();

连接池工具类

public class JedisPoolUtils {
    private static JedisPool jedisPool;
    //静态代码初始化池配置
    static{
        
        //创建Properties对象
        Properties pro = new Properties();
        
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,配置到JedisPoolConfig
        JedisPoolConfig config = new JedisPoolConfig();                 
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
            
        //实例化JedisPool
        jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
        
        }

        /**
        * 获取连接
        */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
}

结尾:

如果文章中有什么不足,或者错误的地方,欢迎大家留言分享想法,感谢朋友们的支持!

如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创开发技术文章的公众号:理想二旬不止

17955338-7e8da6f1a8c914ca
image
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值