第R4周:LSTM-火灾温度预测(TensorFlow版)

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客**

>- **🍖 原作者:[K同学啊]**

往期文章可查阅: 深度学习总结

任务说明:数据集中提供了火灾温度(Tem1)、一氧化碳浓度(CO 1)、烟雾浓度(Soot 1)随着时间变化数据,我们需要根据这些数据对未来某一时刻的火灾温度做出预测

🍺要求:

1、了解LSTM是什么,并使用其构建一个完整的程序。

2、R2达到0.83

🍻拔高:

使用第1~8个时刻的数据 预测第9~10个时刻的温度数据。

🚀 我的环境:

  • 语言环境:Python3.11.7
  • 编译器:jupyter notebook
  • 深度学习框架:TensorFlow2.13.0

一、理论知识基础

1. LSTM原理

一句话介绍LSTM,他是RNN的进阶版,如果说RNN的最大限度是理解一句话,那么LSTM的最大限度是理解一段话,详细介绍如下:

LSTM,全称为长短期记忆网络(Long Short Term Memory networks),是一种特殊的RNN,能够虚席到长期依赖关系。LSTM由Hochreiter & Schmidhuber(1997)提出,许多研究者进行了一系列的工作对其改进并使之发扬光大。LSTM在许多问题上效果非常好,现在被广泛使用。

所有的循环神经网络都有着重复的神经网络模块形成链的形式。在普通的RNN中,重复模块结构非常简单,其结构如下:

LSTM避免了长期依赖的问题。可以记住长期信息!LSTM内部有较为复杂的结构。能通过门控状态来选择调整传输的信息,记住需要长时间记忆的信息,忘记不重要的信息,其结构如下:

2. LSTM的数据处理流程

为了更好的理解SLTM输入数据的结构,将时序数据(LSTM输入数据)以可视化的形式呈现。

根据输入的数据结构、预测输出,我们的程序可以大致分为以下六类:

二、前期准备工作

1. 导入数据

打开数据集看到如下图所示:

其中数据集里面的每列的标签含义为:

  • Time:时间
  • Tem1:火灾温度
  • CO 1:一氧化碳浓度
  • Soot 1:烟雾浓度

后面有关火灾的数据都是随着时间而变化的,我们需要根据这些数据对未来某时刻的火灾温度进行预测。

导入数据:

import tensorflow as tf
import pandas as pd
import numpy as np

gpus=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("D:\THE MNIST DATABASE\RNN\R4\woodpine2.csv")
print(df_1.head())

代码输出:

[]
    Time  Tem1  CO 1  Soot 1
0  0.000  25.0   0.0     0.0
1  0.228  25.0   0.0     0.0
2  0.456  25.0   0.0     0.0
3  0.685  25.0   0.0     0.0
4  0.913  25.0   0.0     0.0

由于我的电脑没有安装GPU版本的TensorFlow,故显示"[]"。

同时,读取一个名为"woodpine2.csv"的文件,并将其存储在一个名为df_1的pandas DataFrame中。然后,它打印出这个DataFrame的前几行。

2. 数据可视化

import matplotlib.pyplot as plt
import seaborn as sns

plt.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()

运行结果:

使用matplotlib和seaborn库创建了三个并排的折线图。

  1. `plt.rcParams['savefig.dpi'] = 500`:这行代码设置保存图像时的分辨率,即每英寸的像素数。如果你将绘制的图像保存为图片文件(比如PNG格式),它的分辨率将是500 DPI。

  2. `plt.rcParams['figure.dpi'] = 500`:这行代码设置绘制图像时的分辨率,默认情况下图像在屏幕或笔记本中显示的效果。较高的分辨率值会使图像显示更加清晰和细节丰富。

  3. `fig, ax = plt.subplots(1, 3, constrained_layout=True, figsize=(14, 3))`:创建一个图形对象和三个子图(坐标轴),子图按照一行三列的方式排列。`fig` 是图形对象,`ax` 是一个包含三个子图坐标轴的数组,每个子图用于显示一个折线图。`constrained_layout=True`选项确保子图之间的间距合适,不会重叠。

  4. `sns.lineplot(data=df_1["Tem1"], ax=ax[0])`:创建"Tem1"列的折线图,数据来自DataFrame `df_1`。折线图被放置在第一个子图(`ax[0]`)中。`sns.lineplot`是seaborn库中简化绘制折线图的函数。

  5. `sns.lineplot(data=df_1["CO 1"], ax=ax[1])`:创建"CO 1"列的折线图,数据同样来自DataFrame `df_1`。折线图被放置在第二个子图(`ax[1]`)中。

  6. `sns.lineplot(data=df_1["Soot 1"], ax=ax[2])`:这行代码创建了"Soot 1"列的折线图,数据同样来自DataFrame `df_1`。折线图被放置在第三个子图(`ax[2]`)中。

三、构建数据集

是从 `df_1` DataFrame 中选取所有行和从第二列开始的所有列,然后将结果赋值给一个新的 DataFrame 变量 `dataFrame`。

dataFram=df_1.iloc[:,1:]
dataFram

运行结果:

1. 设置x、y

width_x=8
width_y=1

取前8个时间段的Tem1、CO 1、Soot 1 为x,第9个时间段的Tem1 为y。

x=[]
y=[]

in_start=0

for _,_ in df_1.iterrows():
    in_end=in_start+width_x
    out_end=in_end+width_y
    
    if out_end<len(dataFram):
        x_=np.array(dataFram.iloc[in_start:in_end, ])
        x_=x_.reshape((len(x_)*3))
        y_=np.array(dataFram.iloc[in_end:out_end,0])
        
        x.append(x_)
        y.append(y_)
        
    in_start+=1

x=np.array(x)
y=np.array(y)

x.shape,y.shape

for _, _ in df_1.iterrows(): : 此循环遍历了 df_1 中的每一行数据。但是在代码中并没有使用循环中的变量 _,这意味着这个循环仅仅用于迭代,而没有在循环体内使用行的具体数据。

运行结果:

((5939, 24), (5939, 1))

2. 归一化

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.shape : 这行代码打印出 X_scaled 数组的形状。x_scaled 是缩放后的特征矩阵,其形状为**(样本数, 特征数)**。


x_scaled=x_scaled.reshape(len(x_scaled),width_x,3)
x_scaled.shape

运行结果:

(5939, 8, 3)

x_scaled = x_scaled.reshape(len(x_scaled), width_x, 3): 这行代码对 x_scaled 进行了 reshape 操作。reshape 函数用于改变数组的形状。在这里,将 x_scaled 数组的形状改为 (样本数, width_x, 3)。width_x 是输入窗口的宽度,而 3 是每个时间步包含的特征数。

3. 划分数据集

取5000之前的数据为训练集,5000之后的为验证集

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)

四、构建模型

使用 TensorFlow 中的 Keras API 来构建一个 LSTM(长短期记忆网络)模型

LSTM模型的参数:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,LSTM,Bidirectional
from tensorflow.keras import Input

# 多层 LSTM
model_lstm=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))

构建了一个 LSTM 模型,其中包含两个 LSTM 层和一个 Dense 输出层。LSTM 层用于处理时间序列数据,`return_sequences=True` 设置确保中间的 LSTM 层输出也是一个时间序列,而不仅仅是最后一个时间步的输出。最后的 Dense 层输出预测目标的结果。

  1. `from tensorflow.keras.models import Sequential`: 导入 Keras 中的 Sequential 模型类,它允许我们按照顺序将各种层叠加起来构建神经网络。

  2. `from tensorflow.keras.layers import Dense, LSTM, Bidirectional`: 导入 Keras 中的 Dense 层(全连接层)、LSTM 层(长短期记忆层)和 Bidirectional 层(双向 LSTM 层)。

  3. `from tensorflow.keras import Input`: 导入 Keras 中的 Input 类,用于指定输入数据的形状。

  4. `model_lstm = Sequential()`: 创建一个空的 Sequential 模型对象 `model_lstm`。

  5. `model_lstm.add(LSTM(units=64, activation='relu', return_sequences=True, input_shape=(X_train.shape[1], 3)))`: 向模型中添加一个 LSTM 层。

  • `units=64`: 表示 LSTM 层中有 64 个神经元。

  • `activation='relu'`: 表示 LSTM 层使用 ReLU(Rectified Linear Unit)激活函数。

  • `return_sequences=True`: 表示 LSTM 层的输出将作为下一个 LSTM 层的输入,而不是仅返回最后一个时间步的输出。

  • `input_shape=(X_train.shape[1], 3)`: 指定输入数据的形状。`X_train` 是输入数据的训练集,它的形状为 `(样本数, 时间步数, 特征数)`,在这里 `X_train.shape[1]` 表示时间步数,而 `3` 表示每个时间步的特征数。

  1. `model_lstm.add(LSTM(units=64, activation='relu'))`: 向模型中再添加一个 LSTM 层。
  • `units=64`: 表示 LSTM 层中有 64 个神经元。

  • `activation='relu'`: 表示 LSTM 层使用 ReLU(Rectified Linear Unit)激活函数。

  1. `model_lstm.add(Dense(width_y))`: 向模型中添加一个 Dense 层。
  • `width_y`: 这是一个之前定义的变量,表示预测目标的宽度,也就是需要预测的时间步数。

  • 这个 Dense 层用于输出最终的预测结果,因此它的神经元数等于 `width_y`,并且没有指定激活函数,即默认为线性激活函数。

五、模型训练

1. 编译

#只观测loss数值,不观测准确率,所以删去metrics选项
model_lstm.compile(optimizer=tf.keras.optimizers.Adam(1e-3),
                   loss='mean_squared_error') #损失函数用均方误差

2. 训练

x_train.shape,y_train.shape

运行结果:

((5000, 8, 3), (5000, 1))

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 [==============================] - 3s 11ms/step - loss: 10764.3506 - val_loss: 9891.9375
Epoch 2/40
79/79 [==============================] - 1s 7ms/step - loss: 253.9480 - val_loss: 1172.7687
Epoch 3/40
79/79 [==============================] - 1s 7ms/step - loss: 70.3796 - val_loss: 668.7833
Epoch 4/40
79/79 [==============================] - 1s 7ms/step - loss: 64.9149 - val_loss: 481.6623
Epoch 5/40
79/79 [==============================] - 1s 7ms/step - loss: 54.8473 - val_loss: 336.6349
Epoch 6/40
79/79 [==============================] - 1s 7ms/step - loss: 14.0086 - val_loss: 182.0771
Epoch 7/40
79/79 [==============================] - 1s 7ms/step - loss: 7.8964 - val_loss: 123.3019
Epoch 8/40
79/79 [==============================] - 1s 7ms/step - loss: 7.9218 - val_loss: 139.7560
Epoch 9/40
79/79 [==============================] - 1s 7ms/step - loss: 7.6670 - val_loss: 114.2544
Epoch 10/40
79/79 [==============================] - 1s 7ms/step - loss: 7.9219 - val_loss: 135.5925
Epoch 11/40
79/79 [==============================] - 1s 7ms/step - loss: 7.6049 - val_loss: 174.2708
Epoch 12/40
79/79 [==============================] - 1s 7ms/step - loss: 7.5125 - val_loss: 154.6042
Epoch 13/40
79/79 [==============================] - 1s 7ms/step - loss: 8.3222 - val_loss: 111.5982
Epoch 14/40
79/79 [==============================] - 1s 7ms/step - loss: 8.0469 - val_loss: 157.4362
Epoch 15/40
79/79 [==============================] - 1s 7ms/step - loss: 7.4982 - val_loss: 127.7658
Epoch 16/40
79/79 [==============================] - 1s 7ms/step - loss: 7.1061 - val_loss: 146.1830
Epoch 17/40
79/79 [==============================] - 1s 7ms/step - loss: 7.1750 - val_loss: 156.5059
Epoch 18/40
79/79 [==============================] - 1s 7ms/step - loss: 7.5197 - val_loss: 101.5926
Epoch 19/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2387 - val_loss: 117.7334
Epoch 20/40
79/79 [==============================] - 1s 7ms/step - loss: 7.3422 - val_loss: 105.7751
Epoch 21/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2852 - val_loss: 116.7700
Epoch 22/40
79/79 [==============================] - 1s 7ms/step - loss: 7.4932 - val_loss: 136.8479
Epoch 23/40
79/79 [==============================] - 1s 7ms/step - loss: 7.4134 - val_loss: 98.3815
Epoch 24/40
79/79 [==============================] - 1s 7ms/step - loss: 7.6605 - val_loss: 112.9966
Epoch 25/40
79/79 [==============================] - 1s 7ms/step - loss: 6.9967 - val_loss: 135.6190
Epoch 26/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2674 - val_loss: 131.4203
Epoch 27/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2850 - val_loss: 105.6638
Epoch 28/40
79/79 [==============================] - 1s 7ms/step - loss: 7.3508 - val_loss: 107.9184
Epoch 29/40
79/79 [==============================] - 1s 7ms/step - loss: 7.5499 - val_loss: 129.0708
Epoch 30/40
79/79 [==============================] - 1s 7ms/step - loss: 6.9623 - val_loss: 99.9334
Epoch 31/40
79/79 [==============================] - 1s 7ms/step - loss: 7.1018 - val_loss: 139.2192
Epoch 32/40
79/79 [==============================] - 1s 7ms/step - loss: 7.4560 - val_loss: 97.3027
Epoch 33/40
79/79 [==============================] - 1s 7ms/step - loss: 7.7134 - val_loss: 92.7316
Epoch 34/40
79/79 [==============================] - 1s 7ms/step - loss: 7.0855 - val_loss: 196.1367
Epoch 35/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2137 - val_loss: 176.6974
Epoch 36/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2358 - val_loss: 119.6593
Epoch 37/40
79/79 [==============================] - 1s 7ms/step - loss: 8.9363 - val_loss: 81.6089
Epoch 38/40
79/79 [==============================] - 1s 7ms/step - loss: 7.5995 - val_loss: 72.8987
Epoch 39/40
79/79 [==============================] - 1s 7ms/step - loss: 7.8327 - val_loss: 85.2255
Epoch 40/40
79/79 [==============================] - 1s 7ms/step - loss: 7.2542 - val_loss: 114.3509

五、评估

1. loss图

# 支持中文
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

plt.figure(figsize=(5,3),dpi=300)

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()

运行结果:

2. 调用模型进行预测

# 测试集输入模型进行预测
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=500)
# 画出真实数据和预测数据的对比曲线
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()

运行结果:

复制代码
30/30 [==============================] - 0s 2ms/step

3. 均方根误差和R2

from sklearn import metrics
"""
RMSE:均方根误差 ----->  %ddir均方误差开方
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)

运行结果:

均方根误差:10.69350
R2:0.74156

RMSE均方根误差是预测值与真实值的误差平方根的均值,它用来估计模型预测目标值的性能(准确度),值越小,模型的质量越好。

R2是将预测值跟只使用均值的情况下相比,看能好多少。其区间通常在(0,1)之间。0表示还不如什么都不预测,直接取均值的情况,而1表示所有预测跟真实结果完美匹配的情况,值越接近1,模型的质量越好。

六、心得体会

在本项目中体会了LSTM模型的建立过程。同时,修改参数,将batch_size调整为32,epochs调整为50,得到结果如下:

Epoch 1/50
157/157 [==============================] - 4s 7ms/step - loss: 5803.9741 - val_loss: 997.3257
Epoch 2/50
157/157 [==============================] - 1s 5ms/step - loss: 58.7955 - val_loss: 524.5692
Epoch 3/50
157/157 [==============================] - 1s 5ms/step - loss: 14.5207 - val_loss: 225.7290
Epoch 4/50
157/157 [==============================] - 1s 5ms/step - loss: 9.3101 - val_loss: 253.0079
Epoch 5/50
157/157 [==============================] - 1s 5ms/step - loss: 9.3271 - val_loss: 452.0248
Epoch 6/50
157/157 [==============================] - 1s 5ms/step - loss: 9.2289 - val_loss: 173.1531
Epoch 7/50
157/157 [==============================] - 1s 5ms/step - loss: 8.8041 - val_loss: 198.9779
Epoch 8/50
157/157 [==============================] - 1s 5ms/step - loss: 8.7300 - val_loss: 175.1857
Epoch 9/50
157/157 [==============================] - 1s 5ms/step - loss: 8.8531 - val_loss: 171.3546
Epoch 10/50
157/157 [==============================] - 1s 5ms/step - loss: 9.1017 - val_loss: 247.7276
Epoch 11/50
157/157 [==============================] - 1s 5ms/step - loss: 9.0273 - val_loss: 146.3507
Epoch 12/50
157/157 [==============================] - 1s 5ms/step - loss: 9.3682 - val_loss: 264.0306
Epoch 13/50
157/157 [==============================] - 1s 5ms/step - loss: 7.8832 - val_loss: 145.7737
Epoch 14/50
157/157 [==============================] - 1s 5ms/step - loss: 8.3341 - val_loss: 132.9032
Epoch 15/50
157/157 [==============================] - 1s 5ms/step - loss: 7.9307 - val_loss: 120.7632
Epoch 16/50
157/157 [==============================] - 1s 5ms/step - loss: 7.2120 - val_loss: 144.6875
Epoch 17/50
157/157 [==============================] - 1s 5ms/step - loss: 9.3120 - val_loss: 118.4922
Epoch 18/50
157/157 [==============================] - 1s 5ms/step - loss: 8.1260 - val_loss: 98.8698
Epoch 19/50
157/157 [==============================] - 1s 5ms/step - loss: 11.0811 - val_loss: 175.3161
Epoch 20/50
157/157 [==============================] - 1s 5ms/step - loss: 8.7360 - val_loss: 123.1096
Epoch 21/50
157/157 [==============================] - 1s 5ms/step - loss: 11.2534 - val_loss: 240.5431
Epoch 22/50
157/157 [==============================] - 1s 5ms/step - loss: 7.6774 - val_loss: 155.3054
Epoch 23/50
157/157 [==============================] - 1s 5ms/step - loss: 8.0887 - val_loss: 134.8892
Epoch 24/50
157/157 [==============================] - 1s 5ms/step - loss: 7.4270 - val_loss: 111.8976
Epoch 25/50
157/157 [==============================] - 1s 5ms/step - loss: 6.3537 - val_loss: 146.3686
Epoch 26/50
157/157 [==============================] - 1s 5ms/step - loss: 10.4478 - val_loss: 97.9665
Epoch 27/50
157/157 [==============================] - 1s 5ms/step - loss: 9.7261 - val_loss: 188.2359
Epoch 28/50
157/157 [==============================] - 1s 5ms/step - loss: 10.1440 - val_loss: 110.3858
Epoch 29/50
157/157 [==============================] - 1s 5ms/step - loss: 8.5073 - val_loss: 130.2033
Epoch 30/50
157/157 [==============================] - 1s 5ms/step - loss: 7.0013 - val_loss: 74.1561
Epoch 31/50
157/157 [==============================] - 1s 5ms/step - loss: 14.6065 - val_loss: 103.0083
Epoch 32/50
157/157 [==============================] - 1s 5ms/step - loss: 8.0986 - val_loss: 146.9292
Epoch 33/50
157/157 [==============================] - 1s 5ms/step - loss: 7.1963 - val_loss: 121.0111
Epoch 34/50
157/157 [==============================] - 1s 5ms/step - loss: 8.1757 - val_loss: 109.8830
Epoch 35/50
157/157 [==============================] - 1s 5ms/step - loss: 14.4749 - val_loss: 85.2331
Epoch 36/50
157/157 [==============================] - 1s 5ms/step - loss: 7.6397 - val_loss: 87.5315
Epoch 37/50
157/157 [==============================] - 1s 5ms/step - loss: 8.1814 - val_loss: 71.4447
Epoch 38/50
157/157 [==============================] - 1s 5ms/step - loss: 7.5729 - val_loss: 75.2255
Epoch 39/50
157/157 [==============================] - 1s 5ms/step - loss: 6.2785 - val_loss: 59.0330
Epoch 40/50
157/157 [==============================] - 1s 5ms/step - loss: 8.7710 - val_loss: 68.6848
Epoch 41/50
157/157 [==============================] - 1s 5ms/step - loss: 6.9357 - val_loss: 59.7141
Epoch 42/50
157/157 [==============================] - 1s 5ms/step - loss: 7.9186 - val_loss: 65.5545
Epoch 43/50
157/157 [==============================] - 1s 5ms/step - loss: 7.6705 - val_loss: 64.9584
Epoch 44/50
157/157 [==============================] - 1s 5ms/step - loss: 8.2532 - val_loss: 71.9482
Epoch 45/50
157/157 [==============================] - 1s 5ms/step - loss: 8.5755 - val_loss: 66.6713
Epoch 46/50
157/157 [==============================] - 1s 5ms/step - loss: 7.4758 - val_loss: 93.9396
Epoch 47/50
157/157 [==============================] - 1s 5ms/step - loss: 7.3627 - val_loss: 62.4031
Epoch 48/50
157/157 [==============================] - 1s 5ms/step - loss: 7.2103 - val_loss: 55.2000
Epoch 49/50
157/157 [==============================] - 1s 5ms/step - loss: 7.1437 - val_loss: 133.6639
Epoch 50/50
157/157 [==============================] - 1s 5ms/step - loss: 7.1917 - val_loss: 64.8279

loss图结果如下:

模型预测结果为:

均方根误差和R2值为:

均方根误差:8.05158
R2:0.83787

通过调整,减小了均方根误差的同时提升了R2值的结果。

相关推荐
HuggingFace6 分钟前
自动评估基准 | 设计你的自动评估任务
人工智能·自动评估
GISer_Jing20 分钟前
神经网络初学总结(一)
人工智能·深度学习·神经网络
szxinmai主板定制专家29 分钟前
【国产NI替代】基于A7 FPGA+AI的16振动(16bits)终端PCIE数据采集板卡
人工智能·fpga开发
数据分析能量站1 小时前
神经网络-AlexNet
人工智能·深度学习·神经网络
Ven%1 小时前
如何修改pip全局缓存位置和全局安装包存放路径
人工智能·python·深度学习·缓存·自然语言处理·pip
szxinmai主板定制专家1 小时前
【NI国产替代】基于国产FPGA+全志T3的全国产16振动+2转速(24bits)高精度终端采集板卡
人工智能·fpga开发
YangJZ_ByteMaster2 小时前
EndtoEnd Object Detection with Transformers
人工智能·深度学习·目标检测·计算机视觉
Anlici2 小时前
模型训练与数据分析
人工智能·机器学习
余~~185381628002 小时前
NFC 碰一碰发视频源码搭建技术详解,支持OEM
开发语言·人工智能·python·音视频
唔皇万睡万万睡2 小时前
五子棋小游戏设计(Matlab)
人工智能·matlab·游戏程序