当前位置: 首页 > news >正文

R4-LSTM学习笔记

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

LSTM-火灾温度预测

  • 导入数据
  • 数据可视化
  • 设置X、y
  • 构建模型
  • 调用模型
  • 个人总结
    • LSTM 的基本结构
    • 细胞状态(Cell State)
    • LSTM 的优点

导入数据


import tensorflow as tf
import pandas     as pd
import numpy      as npgpus = tf.config.list_physical_devices("GPU")
if gpus:tf.config.experimental.set_memory_growth(gpus[0], True)  #设置GPU显存用量按需使用tf.config.set_visible_devices([gpus[0]],"GPU")
print(gpus)df_1 = pd.read_csv(r"C:\Users\11054\Desktop\kLearning\R4\woodpine2.csv")
[]

数据可视化


import matplotlib.pyplot as plt
import seaborn as snsplt.rcParams['savefig.dpi'] = 500 #图片像素
plt.rcParams['figure.dpi']  = 500 #分辨率fig, ax =plt.subplots(1,3,constrained_layout=True, figsize=(14, 3))sns.lineplot(data=df_1["Tem1"], ax=ax[0])
sns.lineplot(data=df_1["CO 1"], ax=ax[1])
sns.lineplot(data=df_1["Soot 1"], ax=ax[2])
plt.show()

在这里插入图片描述

#构建数据集


dataFrame = df_1.iloc[:,1:]
dataFrame
Tem1CO 1Soot 1
025.00.0000000.000000
125.00.0000000.000000
225.00.0000000.000000
325.00.0000000.000000
425.00.0000000.000000
............
5943295.00.0000770.000496
5944294.00.0000770.000494
5945292.00.0000770.000491
5946291.00.0000760.000489
5947290.00.0000760.000487

5948 rows × 3 columns

设置X、y


# 取前8个时间段的Tem1、CO 1、Soot 1为X,第9个时间段的Tem1为y。
width_X = 8
width_y = 1
X = []
y = []in_start = 0for _, _ in df_1.iterrows():in_end  = in_start + width_Xout_end = in_end   + width_yif out_end < len(dataFrame):X_ = np.array(dataFrame.iloc[in_start:in_end , ])X_ = X_.reshape((len(X_)*3))y_ = np.array(dataFrame.iloc[in_end  :out_end, 0])X.append(X_)y.append(y_)in_start += 1X = np.array(X)
y = np.array(y)X.shape, y.shape
((5939, 24), (5939, 1))
# 归一化
from sklearn.preprocessing import MinMaxScaler#将数据归一化,范围是0到1
sc       = MinMaxScaler(feature_range=(0, 1))
X_scaled = sc.fit_transform(X)
X_scaled.shape
(5939, 24)
X_scaled = X_scaled.reshape(len(X_scaled),width_X,3)
X_scaled.shape
(5939, 8, 3)
# 划分数据集
X_train = np.array(X_scaled[:5000]).astype('float64')
y_train = np.array(y[:5000]).astype('float64')X_test  = np.array(X_scaled[5000:]).astype('float64')
y_test  = np.array(y[5000:]).astype('float64')
X_train.shape
(5000, 8, 3)

构建模型


# 多层 LSTM
import tensorflow.python.keras as keras
from tensorflow.python.keras.layers.core import Activation, Dropout, Dense
from tensorflow.python.keras.layers import Flatten, LSTM
model_lstm = keras.Sequential()
model_lstm.add(LSTM(units=64, activation='relu', return_sequences=True,input_shape=(X_train.shape[1], 3)))
model_lstm.add(LSTM(units=64, activation='relu'))model_lstm.add(Dense(width_y))
# 只观测loss数值,不观测准确率,所以删去metrics选项
from tensorflow.python.keras.optimizers import adam_v2
optimizer = adam_v2.Adam(1e-3)
model_lstm.compile(optimizer=optimizer,loss='mean_squared_error')  # 损失函数用均方误差
X_train.shape, y_train.shape
((5000, 8, 3), (5000, 1))
# 注意 此处函数弃用 需要修改源码
#‘tensorflow.python.distribute.input_lib‘ has no attribute 
# DistributedDataset 实际是判断是否为分布式数据,返回值直接改为False
history_lstm = model_lstm.fit(X_train, y_train,batch_size=64,epochs=40,validation_data=(X_test, y_test),validation_freq=1)
Epoch 1/40
79/79 [==============================] - 5s 18ms/step - loss: 11953.3770 - val_loss: 4300.0811
Epoch 2/40
79/79 [==============================] - 1s 14ms/step - loss: 154.9082 - val_loss: 996.6027
Epoch 3/40
79/79 [==============================] - 1s 13ms/step - loss: 15.5335 - val_loss: 341.1582
Epoch 4/40
79/79 [==============================] - 1s 13ms/step - loss: 7.5403 - val_loss: 290.5845
Epoch 5/40
79/79 [==============================] - 1s 12ms/step - loss: 7.3599 - val_loss: 265.5993
Epoch 6/40
79/79 [==============================] - 1s 13ms/step - loss: 7.0518 - val_loss: 257.2565
Epoch 7/40
79/79 [==============================] - 1s 14ms/step - loss: 7.2212 - val_loss: 291.9721
Epoch 8/40
79/79 [==============================] - 1s 14ms/step - loss: 6.5968 - val_loss: 214.1582
Epoch 9/40
79/79 [==============================] - 1s 12ms/step - loss: 7.5128 - val_loss: 243.2180
Epoch 10/40
79/79 [==============================] - 1s 14ms/step - loss: 6.6279 - val_loss: 218.3901
Epoch 11/40
79/79 [==============================] - 1s 14ms/step - loss: 6.3576 - val_loss: 220.4561
Epoch 12/40
79/79 [==============================] - 1s 13ms/step - loss: 6.5356 - val_loss: 243.2316
Epoch 13/40
79/79 [==============================] - 1s 12ms/step - loss: 6.8603 - val_loss: 225.0939
Epoch 14/40
79/79 [==============================] - 1s 13ms/step - loss: 7.3385 - val_loss: 154.1982
Epoch 15/40
79/79 [==============================] - 1s 14ms/step - loss: 7.1614 - val_loss: 225.3159
Epoch 16/40
79/79 [==============================] - 1s 13ms/step - loss: 6.5654 - val_loss: 199.5660
Epoch 17/40
79/79 [==============================] - 1s 12ms/step - loss: 6.4847 - val_loss: 176.0666
Epoch 18/40
79/79 [==============================] - 1s 11ms/step - loss: 6.3168 - val_loss: 217.2618
Epoch 19/40
79/79 [==============================] - 1s 12ms/step - loss: 6.6176 - val_loss: 244.9601
Epoch 20/40
79/79 [==============================] - 1s 13ms/step - loss: 6.9601 - val_loss: 229.4581
Epoch 21/40
79/79 [==============================] - 1s 15ms/step - loss: 5.8222 - val_loss: 351.2197
Epoch 22/40
79/79 [==============================] - 1s 13ms/step - loss: 7.2396 - val_loss: 149.9563
Epoch 23/40
79/79 [==============================] - 1s 13ms/step - loss: 7.0510 - val_loss: 273.4801
Epoch 24/40
79/79 [==============================] - 1s 14ms/step - loss: 6.3674 - val_loss: 254.2635
Epoch 25/40
79/79 [==============================] - 1s 13ms/step - loss: 6.6236 - val_loss: 139.3550
Epoch 26/40
79/79 [==============================] - 1s 14ms/step - loss: 5.7532 - val_loss: 296.6612
Epoch 27/40
79/79 [==============================] - 1s 14ms/step - loss: 6.8470 - val_loss: 305.5312
Epoch 28/40
79/79 [==============================] - 1s 13ms/step - loss: 7.1153 - val_loss: 160.2791
Epoch 29/40
79/79 [==============================] - 1s 12ms/step - loss: 5.9563 - val_loss: 235.7691
Epoch 30/40
79/79 [==============================] - 1s 13ms/step - loss: 7.2391 - val_loss: 168.0048
Epoch 31/40
79/79 [==============================] - 1s 13ms/step - loss: 5.8283 - val_loss: 197.9875
Epoch 32/40
79/79 [==============================] - 1s 14ms/step - loss: 5.3628 - val_loss: 279.9405
Epoch 33/40
79/79 [==============================] - 1s 14ms/step - loss: 7.0928 - val_loss: 134.6513
Epoch 34/40
79/79 [==============================] - 1s 14ms/step - loss: 6.9159 - val_loss: 213.4102
Epoch 35/40
79/79 [==============================] - 1s 14ms/step - loss: 5.9036 - val_loss: 190.3418
Epoch 36/40
79/79 [==============================] - 1s 14ms/step - loss: 7.2137 - val_loss: 136.0768
Epoch 37/40
79/79 [==============================] - 1s 14ms/step - loss: 5.9089 - val_loss: 176.8896
Epoch 38/40
79/79 [==============================] - 1s 13ms/step - loss: 6.0480 - val_loss: 153.8418
Epoch 39/40
79/79 [==============================] - 1s 12ms/step - loss: 5.7332 - val_loss: 255.8892
Epoch 40/40
79/79 [==============================] - 1s 14ms/step - loss: 6.2338 - val_loss: 163.2283
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号plt.figure(figsize=(5, 3),dpi=120)plt.plot(history_lstm.history['loss']    , label='LSTM Training Loss')
plt.plot(history_lstm.history['val_loss'], label='LSTM Validation Loss')plt.title('Training and Validation Loss')
plt.legend()
plt.show()

在这里插入图片描述

调用模型


predicted_y_lstm = model_lstm.predict(X_test)                        # 测试集输入模型进行预测y_test_one = [i[0] for i in y_test]
predicted_y_lstm_one = [i[0] for i in predicted_y_lstm]plt.figure(figsize=(5, 3),dpi=120)
# 画出真实数据和预测数据的对比曲线
plt.plot(y_test_one[:1000], color='red', label='真实值')
plt.plot(predicted_y_lstm_one[:1000], color='blue', label='预测值')plt.title('Title')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

在这里插入图片描述

from sklearn import metrics
"""
RMSE :均方根误差  ----->  对均方误差开方
R2   :决定系数,可以简单理解为反映模型拟合优度的重要的统计量
"""
RMSE_lstm  = metrics.mean_squared_error(predicted_y_lstm, y_test)**0.5
R2_lstm    = metrics.r2_score(predicted_y_lstm, y_test)print('均方根误差: %.5f' % RMSE_lstm)
print('R2: %.5f' % R2_lstm)
均方根误差: 12.77608
R2: 0.70679

个人总结

LSTM 的基本结构

LSTM 的核心思想是通过门控机制来控制信息的流动。一个标准的 LSTM 单元包含以下三个门结构:

  1. 遗忘门(Forget Gate)

    • 决定哪些信息需要从细胞状态中丢弃。
    • 计算公式:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ f_t = \sigma(W…
    • 其中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ \sigma \) 是 Sigmoid 激活函数,KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ W_f \) 是权重矩阵,KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ b_f \) 是偏置项,KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ h_{t-1} \) 是前一时间步的隐藏状态,KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ x_t \) 是当前时间步的输入。
  2. 输入门(Input Gate)

    • 决定哪些新信息需要添加到细胞状态中。
    • 计算公式:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ i_t = \sigma(W…
    • 以及新候选值:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ \tilde{C_t} = …
  3. 输出门(Output Gate)

    • 决定当前细胞状态的哪些部分将输出。
    • 计算公式:KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ o_t = \sigma(W…

细胞状态(Cell State)

细胞状态 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ C_t \)是 LSTM 的核心,它通过门控机制来传递长期依赖信息。

  • 更新细胞状态:

    • KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ C_t = f_t \odo…
    • 其中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ \odot \) 表示逐元素乘法。
  • 计算当前时间步的隐藏状态:

    • KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ h_t = o_t \odo…

在这里插入图片描述
在这里插入图片描述

LSTM 的优点

  1. 处理长期依赖问题:通过门控机制,LSTM 能够有效处理序列数据中的长期依赖问题,避免了传统 RNN 的梯度消失和梯度爆炸问题。

  2. 灵活性:LSTM 可以用于各种序列学习任务,如语言模型、语音识别、时间序列预测等。

  3. 性能:在许多序列学习任务中,LSTM 表现出色,尤其是在需要记忆长期信息的场景中。

相关文章:

R4-LSTM学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-火灾温度预测 导入数据数据可视化设置X、y构建模型调用模型个人总结LSTM 的基本结构细胞状态&#xff08;Cell State&#xff09;LSTM 的优点 导入数据 i…...

Unity搭配VS Code使用

1.Unity编辑器中设置External Tools为VS Code Edit->Preferces->External Tools->Visual Studio Code 2.VS Code安装Unity插件 快捷键“CtrlShiftX”输入“Unity”点击“Install” 3.下载安装.Net 下载 .NET 8.0 (Linux、macOS 和 Windows) 下载完成后安装.Net输…...

Go Ebiten小游戏开发:井字棋

今天我将分享如何使用 Go 语言和 Ebiten 游戏库开发一个简单的井字棋游戏。Ebiten 是一个轻量级的 2D 游戏库&#xff0c;非常适合用来开发小型游戏。通过这个项目&#xff0c;我们可以学习到如何使用 Ebiten 处理输入、渲染图形以及管理游戏状态。 项目概述 井字棋是一个经典…...

嵌入式系统中的 OpenCV 与 OpenGLES 协同应用

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一、OpenCV 在嵌入式中的基石地位二、OpenGLES 为嵌入式图形渲染赋能三、二者协同的精妙之处四、面临的挑战与应对策略 在嵌入式开…...

秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版

秒懂虚拟化&#xff08;一&#xff09;&#xff1a;从概念到网络、存储虚拟化全解析&#xff0c;通俗解读版-CSDN博客这篇文章学习了虚拟化的概念、网络虚拟化和存储虚拟化&#xff0c;本节将继续学习服务器虚拟化、操作系统虚拟化、服务虚拟化。 1、服务器虚拟化 服务器虚拟…...

Java定时任务

在 Java 中&#xff0c;定时任务通常用于在特定时间或间隔执行某个操作。Java 提供了多种方式来实现定时任务&#xff0c;包括使用 Timer 类、ScheduledExecutorService 和 Spring 框架中的定时任务功能。下面将介绍这些常见的方法。 1. 使用 Timer 类 Timer 类可以用来安排任…...

springCloud特色知识记录(基于黑马教程2024年)

目录 Nacos 简介 Nacos 的特点 Nacos 的使用步骤可以查看黑马教程文档&#xff1a;‍‌​‌​&#xfeff;⁠​⁠​​​​​&#xfeff;‬​​​​‍‌&#xfeff;‬⁠​&#xfeff;​‬​​​​‍​&#xfeff;⁠​&#xfeff;​​⁠​​‬​⁠&#xfeff;​​day03-微…...

Linux---shell脚本练习

要求&#xff1a; 1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 日录下…...

ClickHouse-CPU、内存参数设置

常见配置 1. CPU资源 1、clickhouse服务端的配置在config.xml文件中 config.xml文件是服务端的配置&#xff0c;在config.xml文件中指向users.xml文件&#xff0c;相关的配置信息实际是在users.xml文件中的。大部分的配置信息在users.xml文件中&#xff0c;如果在users.xml文…...

浅谈云计算02 | 云计算模式的演进

云计算计算模式的演进 一、云计算计算模式的起源追溯1.2 个人计算机与桌面计算 二、云计算计算模式的发展阶段2.1 效用计算的出现2.2 客户机/服务器模式2.3 集群计算2.4 服务计算2.5 分布式计算2.6 网格计算 三、云计算计算模式的成熟与多元化3.1 主流云计算服务模式的确立3.1.…...

设置模块一级菜单添加遥控器功能

文章目录 问题点问题分析资源和源码分析解决方案源码分析找到对应的Activitymenifest 分析SettingsHomepageActivity 分析 问题点 MTK Android12/13 系统设置一级界面&#xff0c;蓝牙遥控器无法上下滑动页面。 备注&#xff1a;自己对设置整个模块系统其实并不熟悉&#xff…...

Blazor中Syncfusion Word组件使用方法

Blazor中Syncfusion Word组件用于在Blazor应用程序中创建、编辑、查看和打印 Word&#xff08;DOC、DOCX 和 RTF&#xff09;文档。 主要功能&#xff1a; 从头开始创建文档。打开和编辑 Word&#xff08;DOC、DOCX&#xff09;、RTF 和 SFDT&#xff08;Syncfusion 文档文本…...

HTB:Driver[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用smbclient尝…...

微信小程序-Docker+Nginx环境配置业务域名验证文件

在实际开发或运维工作中&#xff0c;我们时常需要在 Nginx 部署的服务器上提供一个特定的静态文件&#xff0c;用于域名验证或第三方平台验证。若此时使用 Docker 容器部署了 Nginx&#xff0c;就需要将该验证文件正确地映射&#xff08;挂载&#xff09;到容器中&#xff0c;并…...

55_OpenResty开发入门

Nginx编程需要用到Lua语言,因此我们必须先学习Lua的基本语法。Nginx本身也是C语言开发,因此也允许基于Lua做拓展。多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。 1.OpenResty概述 OpenResty是一款基于NGINX和LuaJIT的Web平台。通过Lua扩展NGINX实现的可伸…...

Windows安装Jenkins——及修改主目录、配置简体中文、修改插件源

一、简介 Jenkinshttps://www.jenkins.io/zh/ Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。 二、Windows安装配置Jenkins2.479 2.1、J...

大数据环境搭建进度

1.使用虚拟机的系统&#xff1a;centos7.xLinux 2.资源不足&#xff0c;使用云服务器&#xff1a; 1. 3.使用远程登录进行操作 用xshell 4.任务 1.虚拟机装好 2.设置IP地址 3.可以联网 4.设置远程登录访问 5.创建module和software目录&#xff0c;修改两…...

第27章 汇编语言--- 设备驱动开发基础

汇编语言是低级编程语言的一种&#xff0c;它与特定的计算机架构紧密相关。在设备驱动开发中&#xff0c;汇编语言有时用于编写性能关键的部分或直接操作硬件&#xff0c;因为它是接近机器语言的代码&#xff0c;可以提供对硬件寄存器和指令集的直接访问。 要展开源代码详细叙…...

Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语

1、apache hop核心概念思维导图 虽然apache hop是kettle的一个分支&#xff0c;但是它的概念和kettle还是有一些区别的&#xff0c;下图是我根据官方文档梳理的appache hop的核心概念思维导图。 2、Tools&#xff08;工具&#xff09; 1&#xff09;Hop Conf Hop Conf 是一个…...

Vue2+OpenLayers使用Overlay实现点击获取当前经纬度信息(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 关键参数&#xff1a; 实现思路&#xff1a; 核心代码&#xff1a; 完整代码&#xff1a; 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 覆盖物&#xff08;Overlay&#xf…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...