T4打卡 学习笔记

所用环境

● 语言环境:Python3.11
● 编译器:jupyter notebook
● 深度学习框架:TensorFlow2.16.1
● 显卡(GPU):NVIDIA GeForce RTX 2070

设置GPU

from tensorflow import keras
from tensorflow.keras import layers,models
import os, PIL, pathlib
import matplotlib.pyplot as plt
import tensorflow        as tfgpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0]                                        #如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True)  #设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0],"GPU")gpus
[]

导入数据

data_dir = r"C:\Users\11054\Desktop\kLearning\p4_learning\data"data_dir = pathlib.Path(data_dir)

查看数据

image_count = len(list(data_dir.glob('*/*.jpg')))print("图片总数为:",image_count)
图片总数为: 2142
Monkeypox = list(data_dir.glob('Monkeypox/*.jpg'))
PIL.Image.open(str(Monkeypox[0]))

在这里插入图片描述

batch_size = 32
img_height = 224
img_width = 224
"""
关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789
"""
train_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
Found 2142 files belonging to 2 classes.
Using 1714 files for training.
"""
关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789
"""
val_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
Found 2142 files belonging to 2 classes.
Using 428 files for validation.
class_names = train_ds.class_names
print(class_names)
['Monkeypox', 'Others']
plt.figure(figsize=(20, 10))for images, labels in train_ds.take(1):for i in range(20):ax = plt.subplot(5, 10, i + 1)plt.imshow(images[i].numpy().astype("uint8"))plt.title(class_names[labels[i]])plt.axis("off")

在这里插入图片描述

for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break
(32, 224, 224, 3)
(32,)

配置数据集

# def mean_std_normalize(image):
#     return image  / 255
#
# train_ds = train_ds.map(lambda x, y: (mean_std_normalize(x), y))
# val_ds = val_ds.map(lambda x, y: (mean_std_normalize(x), y))
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

构建CNN网络

num_classes = 2"""
关于卷积核的计算不懂的可以参考文章:https://blog.csdn.net/qq_38251616/article/details/114278995layers.Dropout(0.4) 作用是防止过拟合,提高模型的泛化能力。
在上一篇文章花朵识别中,训练准确率与验证准确率相差巨大就是由于模型过拟合导致的关于Dropout层的更多介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/115826689
"""model = models.Sequential([layers.Rescaling(1./255, input_shape=(img_height, img_width, 3)),layers.Conv2D(16, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), # 卷积层1,卷积核3*3layers.AveragePooling2D((2, 2)),               # 池化层1,2*2采样layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3layers.AveragePooling2D((2, 2)),               # 池化层2,2*2采样layers.Dropout(0.4),layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3layers.Dropout(0.3),layers.Flatten(),                       # Flatten层,连接卷积层与全连接层layers.Dense(128, activation='relu'),   # 全连接层,特征进一步提取layers.Dense(num_classes)               # 输出层,输出预期结果
])model.summary()  # 打印网络结构
Model: "sequential_13"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Layer (type)                         ┃ Output Shape                ┃         Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ rescaling_2 (Rescaling)              │ (None, 224, 224, 3)         │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ conv2d_39 (Conv2D)                   │ (None, 222, 222, 16)        │             448 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ average_pooling2d_26                 │ (None, 111, 111, 16)        │               0 │
│ (AveragePooling2D)                   │                             │                 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ conv2d_40 (Conv2D)                   │ (None, 109, 109, 32)        │           4,640 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ average_pooling2d_27                 │ (None, 54, 54, 32)          │               0 │
│ (AveragePooling2D)                   │                             │                 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dropout_26 (Dropout)                 │ (None, 54, 54, 32)          │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ conv2d_41 (Conv2D)                   │ (None, 52, 52, 64)          │          18,496 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dropout_27 (Dropout)                 │ (None, 52, 52, 64)          │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ flatten_13 (Flatten)                 │ (None, 173056)              │               0 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_26 (Dense)                     │ (None, 128)                 │      22,151,296 │
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
│ dense_27 (Dense)                     │ (None, 2)                   │             258 │
└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘
 Total params: 22,175,138 (84.59 MB)
 Trainable params: 22,175,138 (84.59 MB)
 Non-trainable params: 0 (0.00 B)

编译

# 设置优化器
opt = tf.keras.optimizers.Adam(learning_rate=1e-4)model.compile(optimizer=opt,loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

训练模型


from tensorflow.keras.callbacks import ModelCheckpointepochs = 50checkpoint = ModelCheckpoint(filepath='best_model.weights.h5',  # Change to .weights.h5save_weights_only=True,monitor='val_loss',mode='min',save_best_only=True
)history = model.fit(train_ds,validation_data=val_ds,epochs=epochs,callbacks=[checkpoint])
Epoch 1/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m16s[0m 257ms/step - accuracy: 0.5094 - loss: 0.7558 - val_accuracy: 0.5350 - val_loss: 0.6751
Epoch 2/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 262ms/step - accuracy: 0.5925 - loss: 0.6632 - val_accuracy: 0.6005 - val_loss: 0.6564
Epoch 3/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 255ms/step - accuracy: 0.6289 - loss: 0.6556 - val_accuracy: 0.6308 - val_loss: 0.6436
Epoch 4/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m15s[0m 279ms/step - accuracy: 0.6565 - loss: 0.6333 - val_accuracy: 0.6402 - val_loss: 0.6487
Epoch 5/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.6738 - loss: 0.6020 - val_accuracy: 0.6963 - val_loss: 0.5978
Epoch 6/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 253ms/step - accuracy: 0.6961 - loss: 0.5812 - val_accuracy: 0.6659 - val_loss: 0.6477
Epoch 7/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 243ms/step - accuracy: 0.7291 - loss: 0.5505 - val_accuracy: 0.6752 - val_loss: 0.6096
Epoch 8/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 248ms/step - accuracy: 0.7211 - loss: 0.5350 - val_accuracy: 0.7196 - val_loss: 0.5285
Epoch 9/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 247ms/step - accuracy: 0.7731 - loss: 0.4832 - val_accuracy: 0.7243 - val_loss: 0.5279
Epoch 10/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 250ms/step - accuracy: 0.7680 - loss: 0.4829 - val_accuracy: 0.7383 - val_loss: 0.4957
Epoch 11/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 240ms/step - accuracy: 0.7907 - loss: 0.4464 - val_accuracy: 0.7336 - val_loss: 0.4979
Epoch 12/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 246ms/step - accuracy: 0.8025 - loss: 0.4156 - val_accuracy: 0.7500 - val_loss: 0.4833
Epoch 13/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m10s[0m 175ms/step - accuracy: 0.8184 - loss: 0.4268 - val_accuracy: 0.7944 - val_loss: 0.4716
Epoch 14/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m7s[0m 128ms/step - accuracy: 0.8452 - loss: 0.3810 - val_accuracy: 0.7991 - val_loss: 0.4530
Epoch 15/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m7s[0m 127ms/step - accuracy: 0.8464 - loss: 0.3660 - val_accuracy: 0.7827 - val_loss: 0.4764
Epoch 16/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m10s[0m 181ms/step - accuracy: 0.8320 - loss: 0.3806 - val_accuracy: 0.7967 - val_loss: 0.4451
Epoch 17/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 255ms/step - accuracy: 0.8550 - loss: 0.3492 - val_accuracy: 0.7897 - val_loss: 0.4656
Epoch 18/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 250ms/step - accuracy: 0.8770 - loss: 0.3161 - val_accuracy: 0.7477 - val_loss: 0.4867
Epoch 19/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 268ms/step - accuracy: 0.8535 - loss: 0.3309 - val_accuracy: 0.8154 - val_loss: 0.4552
Epoch 20/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 266ms/step - accuracy: 0.8941 - loss: 0.2848 - val_accuracy: 0.7967 - val_loss: 0.4495
Epoch 21/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 256ms/step - accuracy: 0.8743 - loss: 0.2957 - val_accuracy: 0.8131 - val_loss: 0.4250
Epoch 22/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 245ms/step - accuracy: 0.8794 - loss: 0.2941 - val_accuracy: 0.8201 - val_loss: 0.4460
Epoch 23/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.8551 - loss: 0.3300 - val_accuracy: 0.8294 - val_loss: 0.4210
Epoch 24/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.8998 - loss: 0.2713 - val_accuracy: 0.8131 - val_loss: 0.4808
Epoch 25/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 246ms/step - accuracy: 0.8802 - loss: 0.2752 - val_accuracy: 0.7897 - val_loss: 0.5133
Epoch 26/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 253ms/step - accuracy: 0.8714 - loss: 0.2991 - val_accuracy: 0.8481 - val_loss: 0.4189
Epoch 27/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 248ms/step - accuracy: 0.9051 - loss: 0.2461 - val_accuracy: 0.8435 - val_loss: 0.4028
Epoch 28/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 242ms/step - accuracy: 0.8978 - loss: 0.2519 - val_accuracy: 0.8411 - val_loss: 0.4060
Epoch 29/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 242ms/step - accuracy: 0.9127 - loss: 0.2319 - val_accuracy: 0.8294 - val_loss: 0.4254
Epoch 30/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 246ms/step - accuracy: 0.9162 - loss: 0.2175 - val_accuracy: 0.8575 - val_loss: 0.4212
Epoch 31/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 255ms/step - accuracy: 0.9306 - loss: 0.1994 - val_accuracy: 0.8435 - val_loss: 0.4504
Epoch 32/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 246ms/step - accuracy: 0.9094 - loss: 0.2175 - val_accuracy: 0.8294 - val_loss: 0.4103
Epoch 33/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.9161 - loss: 0.1994 - val_accuracy: 0.8481 - val_loss: 0.3999
Epoch 34/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 249ms/step - accuracy: 0.9201 - loss: 0.1888 - val_accuracy: 0.8341 - val_loss: 0.4599
Epoch 35/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 250ms/step - accuracy: 0.9113 - loss: 0.2096 - val_accuracy: 0.8178 - val_loss: 0.4632
Epoch 36/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.9378 - loss: 0.1745 - val_accuracy: 0.8551 - val_loss: 0.4268
Epoch 37/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 255ms/step - accuracy: 0.9438 - loss: 0.1538 - val_accuracy: 0.8575 - val_loss: 0.4274
Epoch 38/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 253ms/step - accuracy: 0.9433 - loss: 0.1420 - val_accuracy: 0.8364 - val_loss: 0.4363
Epoch 39/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.9325 - loss: 0.1676 - val_accuracy: 0.8458 - val_loss: 0.4268
Epoch 40/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.9487 - loss: 0.1396 - val_accuracy: 0.8458 - val_loss: 0.4373
Epoch 41/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.9435 - loss: 0.1709 - val_accuracy: 0.8481 - val_loss: 0.4572
Epoch 42/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m13s[0m 249ms/step - accuracy: 0.9519 - loss: 0.1419 - val_accuracy: 0.8435 - val_loss: 0.4637
Epoch 43/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 256ms/step - accuracy: 0.9304 - loss: 0.1656 - val_accuracy: 0.8248 - val_loss: 0.5690
Epoch 44/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.9233 - loss: 0.2013 - val_accuracy: 0.8551 - val_loss: 0.4235
Epoch 45/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 252ms/step - accuracy: 0.9634 - loss: 0.1338 - val_accuracy: 0.8481 - val_loss: 0.4394
Epoch 46/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.9442 - loss: 0.1380 - val_accuracy: 0.8458 - val_loss: 0.4698
Epoch 47/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 254ms/step - accuracy: 0.9368 - loss: 0.1555 - val_accuracy: 0.8458 - val_loss: 0.4358
Epoch 48/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 253ms/step - accuracy: 0.9529 - loss: 0.1199 - val_accuracy: 0.8505 - val_loss: 0.4860
Epoch 49/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 251ms/step - accuracy: 0.9416 - loss: 0.1373 - val_accuracy: 0.8528 - val_loss: 0.4813
Epoch 50/50
[1m54/54[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m14s[0m 255ms/step - accuracy: 0.9595 - loss: 0.1228 - val_accuracy: 0.8621 - val_loss: 0.4528

模型评估

acc = history.history['accuracy']
val_acc = history.history['val_accuracy']loss = history.history['loss']
val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

在这里插入图片描述

使用模型预测

# 加载效果最好的模型权重
model.load_weights('best_model.weights.h5')
from PIL import Image
import numpy as npimg = Image.open(r"C:\Users\11054\Desktop\kLearning\p4_learning\data\Others\NM01_01_00.jpg")  
image = tf.image.resize(img, [img_height, img_width])img_array = tf.expand_dims(image, 0)predictions = model.predict(img_array) # 这里选用你已经训练好的模型
print("预测结果为:",class_names[np.argmax(predictions)])
[1m1/1[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 86ms/step
预测结果为: Others

个人总结

使用了新版本的tensorflow,layers.Rescaling(1./255, input_shape=(img_height, img_width, 3))方法与旧版本调用有所不同,尝试了将归一化注释,结果显示收敛精度显著降低

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Vercel 搭建自己的Dashy导航页

背景 Dashy 是一个开源的自托管导航页面配置服务,它具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。用户可以利用 Dashy 将自己常用的一些网站聚合起来,形成一个个性化的导航页面。 同类的竞品还有Heimdall, Flare 等。 可以通过Docker 等…

selenium4如何指定chrome和firefox的驱动(driver)路径

pythonpytestselenium框架的自动化测试脚本。 原本用的chrome,很久没用了,今天执行,发现chrome偷偷升级,我的chromedriver版本不对了。。。鉴于访问chrome相关网站太艰难,决定弃用chrome,改用firefox。因为…

用易查分制作《假期安全承诺书》支持在线手写签名,一键导出打印

暑假将至,学校通常会下发假期安全承诺书让家长签署。 易查分可以实现网上下发安全承诺书通知,让学生家长进行签名确认,还可以导出PDF文件,方便打印一人一张的纸质版承诺书,下面就来教给大家如何使用吧! 暑假…

【语言模型】Xinference的部署过程

一、引言 Xinference,也称为Xorbits Inference,是一个性能强大且功能全面的分布式推理框架,专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家,都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…

第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章,我觉得我就是被麦克斯韦妖摆弄的…

[OtterCTF 2018]Graphic‘s For The Weak

恶意软件的图形中有些可疑之处。 软件图形 ???这里的恶意文件都是 vmware-tray.ex使用procdump转存进程的可执行文件 (可执行的)导出了 ,看文件里面是否存在 图片 volatility.exe -f .\OtterCTF.vmem --pro…

长鑫存储母公司斥资24亿美元发展国产HBM

国产DRAM厂商长鑫存储母公司睿力集成计划投资24亿美元在上海建一座高端封装工厂。据报道,该工厂将专注于高带宽存储器(HBM)芯片的封装,预计到2026年中开始投入生产。长鑫存储将利用来自多方投资者的资金进行建设,其中包…

CXL:拯救NVMe SSD缓存不足设计难题-2

LMB提出了基于CXL协议的内存扩展框架和内核模块。该方案利用CXL内存扩展器作为物理DRAM源,旨在提供一个统一的内存分配接口,使PCIe和CXL设备都能方便地访问扩展的内存资源。通过这个接口,NVMe驱动和CUDA的统一内存内核驱动可以直接高效地访问…

1-爬虫基础知识(6节课学会爬虫)

1-爬虫基础知识(6节课学会爬虫) 1.什么是爬虫2.爬取的数据去哪了3.需要的软件和环境4.浏览器的请求(1)Url(2)浏览器请求url地址(3)url地址对应的响应 5.认识HTTP/HTTPS5.1 http协议之…

如何应对UI测试自动化的不稳定循环!

以下为作者观点: 当我加入UI自动化团队时,我很高兴能为新功能的自动化测试用例开发做出贡献。然而,我很快意识到团队花费了大量时间来修复之前迭代中不稳定的测试。这种情况让我感到困惑,因为当自动化测试脚本已知不稳定时&#…

Excel+vue+java实现批量处理功能

需求背景: 产品创建流程比较复杂,有时候需要一次性创建多至10个,所以做了Excel维护产品信息,直接导入创建的功能。能极大提高效率。 简要概括实现: 一、参考单个创建,设计创建模板,表头对应填写字段名&…

《昇思25天学习打卡营第12天 | 昇思MindSpore基于MindSpore的GPT2文本摘要》

12天 本节学习了基于MindSpore的GPT2文本摘要。 1.数据集加载与处理 1.1.数据集加载 1.2.数据预处理 2.模型构建 2.1构建GPT2ForSummarization模型 2.2动态学习率 3.模型训练 4.模型推理

javaScript利用indexOf()查找字符串的某个字符出现的位置

1 创建字符串 2 利用indexof()查询字符串的字符 3 利用while循环判断indexOf是否等于-1,不等于-1就打印一次并且索引号1去查下一个字符 //创建字符串var str1234567812311231;var indexstr.indexOf(1);//查询该字符while(index !-1)//indexOf()没有查到会返回-1{…

【linux/shell案例实战】解决Linux和Windows的换行符CRLF和LF问题

目录 一.什么是Linux 和 Windows 的换行符 CRLF 和 LF 二.使用Linux 中命令 dos2unix 和 unix2dos 实现CRLF 和LF的转换 三.使用 windows 中的代码编辑器实现 CRLF 和 LF 的转换(Notepad) 一.什么是Linux 和 Windows 的换行符 CRLF 和 LF CR是Carria…

探索区块链:颠覆性技术的崛起

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下,区块链技术以其独特的去中心化、透明性和不可篡改性等特性,正在逐步改变我们的生活。从金融领域到供应…

vue组件全局注册

描述: vue组件的注册分为局部和全局注册两部分,局部注册相对容易,不做赘述;而不同框架的注册方法又有所不同,下面针对vite框架和vue-cli框架的注册分别进行说明 vue组件全局注册 一、vite框架中全局组件注册二、Vue-cl…

Vue 项目运行时,报错Error: Cannot find module ‘node:path‘

Vue 项目运行时,报错Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…

C++:enum枚举共用体union

enum枚举 C继承C的枚举用法 (1)典型枚举类型定义,枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突: 举例1宏定义,举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色,默认值…

从云原生视角看 AI 原生应用架构的实践

本文核心观点: 基于大模型的 AI 原生应用将越来越多,容器和微服务为代表的云原生技术将加速渗透传统业务。API 是 AI 原生应用的一等公民,并引入了更多流量,催生企业新的生命力和想象空间。AI 原生应用对网关的需求超越了传统的路…

机器人控制系列教程之关节空间运动控制器搭建(1)

机器人位置控制类型 机器人位置控制分为两种类型: 关节空间运动控制—在这种情况下,机器人的位置输入被指定为一组关节角度或位置的向量,这被称为机器人的关节配置,记作q。控制器跟踪一个参考配置,记作 q r e f q_{re…