《Python星球日記》 第54天:卷積神經網絡進階

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》
創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊)

目錄

    • 一、深度CNN架構解析
      • 1. LeNet-5(1998)
      • 2. AlexNet(2012)
      • 3. VGG(2014)
      • 4. ResNet(2015)
      • 5. CNN架構演化與對比
    • 二、數據增強技術
      • 1. 數據增強的核心原理
      • 2. 常見的數據增強技術
        • 幾何變換
        • 顏色和強度變換
      • 3. 使用Keras實現數據增強
      • 4. 數據增強的最佳實踐
    • 三、Dropout與Batch Normalization
      • 1. Dropout技術
        • 工作原理
        • Dropout的優勢
        • 使用建議
      • 2. Batch Normalization
        • 工作原理
        • Batch Normalization的優勢
        • 使用建議
      • 3. Dropout與BN的結合使用
    • 四、CIFAR-10圖像分類實戰
      • 1. 數據集介紹
      • 2. 數據預處理
      • 3. 構建ResNet模型
      • 4. 模型訓練與評估
      • 5. 結果可視化
      • 6. 可視化特征圖
    • 五、總結與展望
      • 學習資源
      • 下一步學習方向

👋 專欄介紹: Python星球日記專欄介紹(持續更新ing)
? 上一篇: 《Python星球日記》 第53天:卷積神經網絡(CNN)入門

歡迎來到Python星球的第54天!🪐

昨天我們學習了卷積神經網絡的基礎知識,今天我們將深入探索更高級的CNN架構和技術,這些知識將幫助你構建更強大、更準確的圖像識別模型。

一、深度CNN架構解析

隨著深度學習的發展,卷積神經網絡的架構也變得越來越復雜和強大。讓我們來了解幾個里程碑式的CNN架構。

在這里插入圖片描述

1. LeNet-5(1998)

LeNet-5是由Yann LeCun開發的最早的CNN架構之一,主要用于手寫數字識別。

LeNet-5 雖然結構簡單,但奠定了現代CNN的基礎,包含了卷積層池化層全連接層的組合。它的設計思想是通過卷積提取特征,通過池化減少參數,最后通過全連接層進行分類。

2. AlexNet(2012)

AlexNet是深度學習復興的標志性架構,在2012年的ImageNet競賽中以顯著優勢獲勝。

AlexNet的主要創新點:

  • 使用ReLU激活函數替代傳統的Sigmoid,減緩了梯度消失問題
  • 引入Dropout來防止過擬合
  • 使用GPU加速訓練,這使得更深的網絡成為可能
  • 數據增強技術的廣泛應用

3. VGG(2014)

VGG網絡由牛津大學Visual Geometry Group提出,以其簡潔統一的結構著稱。

VGG的主要特點:

  • 使用小尺寸卷積核(3×3)替代大尺寸卷積核,通過疊加多層實現更大的感受野
  • 網絡結構統一,易于理解和擴展
  • 具有多個變體(VGG-16, VGG-19等),深度不同
  • 參數量大,需要更多的計算資源

4. ResNet(2015)

殘差網絡(ResNet)解決了深度網絡訓練中的梯度消失/爆炸問題,使得訓練超過100層的網絡成為可能。

ResNet的核心創新是引入了殘差塊(Residual Block),它通過添加跳躍連接(Skip Connection),允許信息直接從前層傳遞到后層,大大緩解了梯度消失問題。

在這里插入圖片描述

殘差塊的數學表達式為: F(x) + x,其中F(x)是需要學習的殘差映射,x是輸入特征。這種簡單而優雅的設計使網絡能夠學習殘差而非完整映射,大大簡化了訓練過程。

5. CNN架構演化與對比

隨著時間的推移,CNN架構變得越來越深,性能也越來越強:

網絡名稱年份層數參數量Top-5錯誤率(ImageNet)主要創新點
LeNet-51998560K-基礎CNN結構
AlexNet2012862M15.3%ReLU, Dropout, 數據增強
VGG-16201416138M7.3%小卷積核堆疊, 統一結構
ResNet-5020155025.6M3.6%殘差連接
ResNet-152201515260M3.57%超深網絡

我們可以看到,深度增加的同時,現代網絡通過特殊設計(如殘差連接)實現了參數量的相對控制

二、數據增強技術

數據增強是解決過擬合和提高模型泛化能力的重要技術,尤其在訓練數據有限的情況下。

1. 數據增強的核心原理

在這里插入圖片描述

數據增強通過對原始圖像進行各種變換,生成新的訓練樣本,從而:

  • 擴大訓練集規模
  • 增加數據多樣性
  • 提高模型對各種變化的魯棒性
  • 減少過擬合

2. 常見的數據增強技術

幾何變換

在這里插入圖片描述

  1. 水平翻轉(Horizontal Flip)

    • 將圖像左右翻轉
    • 特別適合對稱物體,如人臉、車輛等
    • 代碼實現:tf.image.flip_left_right(image)
  2. 旋轉(Rotation)

    • 將圖像按一定角度旋轉
    • 通常使用較小的角度(如±15°)避免信息丟失
    • 代碼實現:tf.image.rot90(image, k=1) (旋轉90度)
  3. 隨機裁剪(Random Crop)

    • 從原圖中隨機裁剪一部分作為訓練樣本
    • 能夠強制模型關注圖像的不同部分
    • 代碼實現:tf.image.random_crop(image, [height, width, 3])
顏色和強度變換
  1. 亮度和對比度調整

    • 隨機改變圖像的亮度和對比度
    • 提高模型對不同光照條件的適應能力
    • 代碼實現:
      # 隨機調整亮度
      image = tf.image.random_brightness(image, max_delta=0.2)
      # 隨機調整對比度
      image = tf.image.random_contrast(image, lower=0.8, upper=1.2)
      
  2. 色調和飽和度調整

    • 改變圖像的色調和飽和度
    • 增強模型對顏色變化的魯棒性
    • 代碼實現:
      # 隨機調整色調
      image = tf.image.random_hue(image, max_delta=0.2)
      # 隨機調整飽和度
      image = tf.image.random_saturation(image, lower=0.5, upper=1.5)
      

在這里插入圖片描述

3. 使用Keras實現數據增強

Keras提供了便捷的ImageDataGenerator類來實現數據增強:

from tensorflow.keras.preprocessing.image import ImageDataGenerator# 創建數據增強器
data_augmentation = ImageDataGenerator(rotation_range=15,       # 旋轉范圍(0-180)width_shift_range=0.1,   # 水平平移范圍height_shift_range=0.1,  # 垂直平移范圍horizontal_flip=True,    # 水平翻轉zoom_range=0.1,          # 縮放范圍shear_range=0.1,         # 剪切變換范圍brightness_range=[0.8, 1.2], # 亮度調整范圍fill_mode='nearest'      # 填充模式
)# 應用到訓練數據
train_generator = data_augmentation.flow(x_train, y_train,batch_size=32
)# 訓練模型
model.fit(train_generator,steps_per_epoch=len(x_train) // 32,epochs=50
)

4. 數據增強的最佳實踐

  • 保持標簽一致性:確保增強后的圖像仍然與原來的標簽相符
  • 適度使用:過度增強可能引入不必要的噪聲
  • 領域相關:根據特定任務選擇合適的增強方法(例如醫學圖像可能不適合顏色變換)
  • 實時增強:在訓練過程中動態生成增強圖像,而不是預先生成
  • 驗證集不增強:只對訓練集應用數據增強,驗證集保持原樣以準確評估模型性能

三、Dropout與Batch Normalization

在深度神經網絡中,DropoutBatch Normalization是兩種重要的正則化和優化技術。

在這里插入圖片描述

1. Dropout技術

Dropout是一種簡單而有效的正則化技術,主要用于防止神經網絡過擬合

在這里插入圖片描述

工作原理

Dropout在訓練過程中隨機關閉(設置為0)一定比例的神經元,強制網絡學習更加魯棒的特征表示。具體來說:

  1. 訓練階段:以概率p隨機斷開神經元連接

    # Dropout層,p=0.5表示有50%的神經元會被隨機關閉
    model.add(Dropout(0.5))
    
  2. 測試階段:所有神經元都參與計算,但輸出會乘以(1-p)進行縮放,以補償訓練時丟棄的神經元

Dropout的優勢
  • 防止過擬合:通過隨機丟棄神經元,避免網絡對訓練數據的過度記憶
  • 提高魯棒性:迫使網絡學習多樣化的特征,不依賴于特定的神經元組合
  • 實現了集成學習:相當于同時訓練多個不同的子網絡,并在測試時進行平均
  • 降低神經元間的共適應性:防止神經元之間形成強依賴關系
使用建議
  • 合適的丟棄率:通常設置為0.2-0.5,較大的網絡可以使用較高的丟棄率
  • 放置位置:一般放在全連接層之后,卷積層之后較少使用
  • 不在測試時使用:測試階段應關閉Dropout功能

2. Batch Normalization

Batch Normalization (BN)是一種網絡層,用于標準化每一層的輸入,從而加速訓練過程并提高模型性能。

工作原理

Batch Normalization通過以下步驟對每個mini-batch的特征進行標準化:

  1. 計算批次均值:μ? = (1/m) Σ???? x?
  2. 計算批次方差:σ2? = (1/m) Σ???? (x? - μ?)2
  3. 標準化:x?? = (x? - μ?) / √(σ2? + ε),其中ε是一個小常數,防止除零
  4. 縮放和偏移:y? = γ · x?? + β,其中γ和β是可學習的參數

在Keras中的實現:

from tensorflow.keras.layers import BatchNormalizationmodel.add(Conv2D(64, (3, 3), activation='relu'))
model.add(BatchNormalization())
Batch Normalization的優勢
  • 加速訓練:通過標準化每層的輸入,減少了內部協變量偏移,使得優化過程更加穩定
  • 允許更高的學習率:歸一化后的數據不容易產生梯度爆炸或消失
  • 減少過擬合:具有一定的正則化效果,因為每個mini-batch的統計量有微小波動
  • 降低對初始化的敏感性:減輕了權重初始化對模型訓練的影響
  • 減少對Dropout的依賴:在某些情況下,BN可以部分替代Dropout的功能
使用建議
  • 放置位置:一般放在卷積層或全連接層之后,激活函數之前
  • 與激活函數的關系
    # 推薦方式:Conv -> BN -> ReLU
    model.add(Conv2D(64, (3, 3)))
    model.add(BatchNormalization())
    model.add(Activation('relu'))
    
  • 小批量大小:BN對較小的批量大小效果不佳,建議使用>=32的批量大小
  • 推理階段:測試時使用整個訓練集的均值和方差,而不是批次統計量

3. Dropout與BN的結合使用

Dropout和Batch Normalization通常可以結合使用,但需要注意順序:

model.add(Conv2D(64, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.3))  # 在激活函數之后應用Dropout

研究表明,將BN放在激活函數前,將Dropout放在激活函數后效果最佳。

四、CIFAR-10圖像分類實戰

CIFAR-10是一個包含60,000張32×32彩色圖像的數據集,分為10個類別,每類6,000張圖像。這是一個很好的CNN進階練習數據集。

1. 數據集介紹

CIFAR-10的10個類別包括:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。

# 加載CIFAR-10數據集
from tensorflow.keras.datasets import cifar10(x_train, y_train), (x_test, y_test) = cifar10.load_data()# 查看數據集形狀
print(f"訓練集: {x_train.shape}, {y_train.shape}")
print(f"測試集: {x_test.shape}, {y_test.shape}")

2. 數據預處理

import numpy as np
from tensorflow.keras.utils import to_categorical# 數據歸一化
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0# 對標簽進行one-hot編碼
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)# 創建數據增強器
from tensorflow.keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(rotation_range=15,width_shift_range=0.1,height_shift_range=0.1,horizontal_flip=True,zoom_range=0.1
)# 將數據增強器應用于訓練數據
datagen.fit(x_train)

3. 構建ResNet模型

讓我們實現一個基于ResNet的深度CNN模型來分類CIFAR-10圖像:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, BatchNormalization, Activation
from tensorflow.keras.layers import MaxPooling2D, AveragePooling2D, Flatten, Dense, add, Dropoutdef residual_block(x, filters, kernel_size=3, stride=1, conv_shortcut=False):"""殘差塊的實現"""shortcut = xif conv_shortcut:shortcut = Conv2D(filters, 1, strides=stride)(shortcut)shortcut = BatchNormalization()(shortcut)# 第一個卷積塊x = Conv2D(filters, kernel_size, strides=stride, padding='same')(x)x = BatchNormalization()(x)x = Activation('relu')(x)# 第二個卷積塊x = Conv2D(filters, kernel_size, padding='same')(x)x = BatchNormalization()(x)# 添加跳躍連接x = add([x, shortcut])x = Activation('relu')(x)return xdef build_resnet_model(input_shape, num_classes):"""構建ResNet模型"""inputs = Input(shape=input_shape)# 初始卷積層x = Conv2D(32, 3, padding='same')(inputs)x = BatchNormalization()(x)x = Activation('relu')(x)# 殘差塊x = residual_block(x, 32)x = residual_block(x, 32)x = residual_block(x, 64, stride=2, conv_shortcut=True)x = residual_block(x, 64)x = residual_block(x, 128, stride=2, conv_shortcut=True)x = residual_block(x, 128)# 全局平均池化x = AveragePooling2D(pool_size=4)(x)x = Flatten()(x)x = Dense(256)(x)x = BatchNormalization()(x)x = Activation('relu')(x)x = Dropout(0.5)(x)# 輸出層outputs = Dense(num_classes, activation='softmax')(x)model = Model(inputs=inputs, outputs=outputs)return model# 構建模型
model = build_resnet_model((32, 32, 3), 10)# 編譯模型
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']
)# 打印模型結構
model.summary()

4. 模型訓練與評估

from tensorflow.keras.callbacks import ModelCheckpoint, LearningRateScheduler, ReduceLROnPlateau# 學習率調度器
def lr_schedule(epoch):lr = 0.001if epoch > 75:lr *= 0.1if epoch > 100:lr *= 0.1return lrlr_scheduler = LearningRateScheduler(lr_schedule)# 學習率自動調整
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=5, min_lr=0.00001
)# 模型保存
checkpoint = ModelCheckpoint('best_resnet_cifar10.h5',monitor='val_accuracy',save_best_only=True,mode='max'
)# 訓練模型
batch_size = 64
epochs = 120history = model.fit(datagen.flow(x_train, y_train, batch_size=batch_size),steps_per_epoch=len(x_train) // batch_size,epochs=epochs,validation_data=(x_test, y_test),callbacks=[lr_scheduler, reduce_lr, checkpoint]
)# 加載最佳模型
from tensorflow.keras.models import load_model
best_model = load_model('best_resnet_cifar10.h5')# 評估模型
score = best_model.evaluate(x_test, y_test)
print(f"測試集準確率: {score[1]*100:.2f}%")

5. 結果可視化

import matplotlib.pyplot as plt# 繪制訓練歷史
plt.figure(figsize=(12, 4))# 準確率曲線
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='訓練準確率')
plt.plot(history.history['val_accuracy'], label='驗證準確率')
plt.title('模型準確率')
plt.xlabel('Epoch')
plt.ylabel('準確率')
plt.legend()# 損失曲線
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='訓練損失')
plt.plot(history.history['val_loss'], label='驗證損失')
plt.title('模型損失')
plt.xlabel('Epoch')
plt.ylabel('損失')
plt.legend()plt.tight_layout()
plt.show()# 混淆矩陣
from sklearn.metrics import confusion_matrix
import seaborn as sns# 預測測試集
y_pred = best_model.predict(x_test)
y_pred_classes = np.argmax(y_pred, axis=1)
y_true = np.argmax(y_test, axis=1)# 計算混淆矩陣
cm = confusion_matrix(y_true, y_pred_classes)# 繪制混淆矩陣
plt.figure(figsize=(10, 8))
class_names = ['飛機', '汽車', '鳥', '貓', '鹿', '狗', '青蛙', '馬', '船', '卡車']
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=class_names, yticklabels=class_names)
plt.title('混淆矩陣')
plt.ylabel('真實標簽')
plt.xlabel('預測標簽')
plt.show()

6. 可視化特征圖

查看卷積層提取的特征,幫助我們理解CNN的工作原理:

import tensorflow as tf# 創建一個模型,用于提取中間層特征
layer_outputs = [layer.output for layer in model.layers if isinstance(layer, tf.keras.layers.Conv2D)]
activation_model = tf.keras.models.Model(inputs=model.input, outputs=layer_outputs)# 選擇一張測試圖像
img_index = 12
test_img = x_test[img_index:img_index+1]# 獲取特征圖
activations = activation_model.predict(test_img)# 顯示原始圖像
plt.figure(figsize=(6, 6))
plt.imshow(x_test[img_index])
plt.title(f"原始圖像: {class_names[y_true[img_index]]}")
plt.axis('off')
plt.show()# 可視化前兩個卷積層的特征圖
plt.figure(figsize=(15, 8))
for i in range(2):feature_maps = activations[i]n_features = min(16, feature_maps.shape[-1])  # 最多顯示16個特征圖for j in range(n_features):plt.subplot(2, 8, i*8+j+1)plt.imshow(feature_maps[0, :, :, j], cmap='viridis')plt.axis('off')if j == 0:plt.title(f"卷積層 {i+1}")plt.tight_layout()
plt.show()

五、總結與展望

在本文中,我們深入探討了卷積神經網絡的進階內容。我們學習了從LeNet到ResNet的經典CNN架構演化,了解了數據增強的重要性和實現方法,掌握了DropoutBatch Normalization的工作原理,并通過CIFAR-10圖像分類任務進行了實踐。

這些進階知識將幫助你構建更強大、更準確的卷積神經網絡模型。隨著深度學習的不斷發展,CNN架構也在不斷創新,如MobileNet(輕量級網絡)、EfficientNet(自動縮放網絡)等,這些都是值得進一步探索的方向。

學習資源

  1. 論文:

    • Deep Residual Learning for Image Recognition (ResNet)
    • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  2. 課程:

    • 吳恩達的深度學習課程(Coursera)
    • CS231n: Convolutional Neural Networks for Visual Recognition(斯坦福)
  3. 書籍:

    • 《Deep Learning》by Ian Goodfellow, Yoshua Bengio, and Aaron Courville

下一步學習方向

  • 遷移學習:利用預訓練模型加速新任務的學習
  • 目標檢測:YOLO、SSD、Faster R-CNN等算法
  • 語義分割:U-Net、DeepLab等架構
  • 生成對抗網絡(GANs):用于圖像生成和風格遷移

希望本文對你理解卷積神經網絡的進階內容有所幫助。在下一篇文章中,我們將探索更多深度學習的前沿技術!


祝你學習愉快,Python星球的探索者!👨?🚀🌠

創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊)
如果你對今天的內容有任何問題,或者想分享你的學習心得,歡迎在評論區留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79377.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

旅游設備生產企業的痛點 質檢系統在旅游設備生產企業的應用

在旅游設備制造行業,產品質量直接關系到用戶體驗與企業口碑。從景區纜車、觀光車到水上娛樂設施,每一件設備的安全性與可靠性都需經過嚴苛檢測。然而,傳統質檢模式常面臨數據分散、流程不透明、合規風險高等痛點,難以滿足旅游設備…

MySql(進階)

一.數據庫約束 約束類型 NOT NULL - 指示某列不能存儲 NULL 值。 (not null不能為NILL) UNIQUE - 保證某列的每行必須有唯一的值。 (unique唯一值) DEFAULT - 規定沒有給列賦值時的默認值。 (default為空給定默認值) PRIMARY…

Three.js + React 實戰系列 - 聯系方式提交表單區域 Contact 組件?(表單綁定 + 表單驗證)

對個人主頁設計和實現感興趣的朋友可以訂閱我的專欄哦!!謝謝大家!!! 在現代網頁中,一個精致的 Contact 區域不僅僅是表單的堆砌,更是用戶與我們建立聯系的第一印象。 在本節課中,我…

UOJ 164【清華集訓2015】V Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?),另有序列 h h h,初始時 h a ha ha. 有 m m m 個操作分五種: add ? ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v):…

C++開發過程中的注意事項詳解

目錄 C++開發過程中的注意事項詳解 一、內存管理:避免泄漏與資源浪費 1.1 使用智能指針管理動態內存 1.2 避免手動內存管理的陷阱 1.3 利用RAII機制管理資源 1.4 容器與內存分配 二、安全性:防御攻擊與未定義行為 2.1 輸入驗證與安全編碼 2.2 使用安全的通信協議 2…

Git 時光機:修改Commit信息

前言 列位看官都知道,Git 的每一次 git commit,其中會包含作者(Author)和提交者(Committer)的姓名與郵箱。有時可能會因為配置錯誤、切換了開發環境,或者只是單純的手滑,導致 commi…

QSFP+、QSFP28、QSFP-DD接口分別實現40G、100G、200G/400G以太網接口

常用的光模塊結構形式: 1)QSFP等效于4個SFP,支持410Gbit/s通道傳輸,可通過4個通道實現40Gbps傳輸速率。與SFP相比,QSFP光模塊的傳輸速率可達SFP光模塊的四倍,在部署40G網絡時可直接使用QSFP光模塊&#xf…

好用的播放器推薦

以下是一些好用的播放器推薦,按照不同平臺和使用場景分類: 電腦端 VLC Media Player 特點:開源、跨平臺,支持幾乎所有的音視頻格式,無需額外安裝解碼器。具備強大的功能,如播放列表管理、視頻和音頻濾鏡、…

Vue基礎(8)_監視屬性、深度監視、監視的簡寫形式

監視屬性(watch): 1.當被監視的屬性變化時,回調函數(handler)自動調用,進行相關操作。 2.監視的屬性必須存在,才能進行監視!! 3.監視的兩種寫法: (1).new Vue時傳入watch配置 (2).通過vm.$watc…

AI服務器的作用都有哪些?

根據網絡環境的飛速發展,人工智能技術逐漸入駐到各個行業當中,其中AI服務器則是一種專門用來運行人工智能算法和模型的硬件設備,通常具備高性能計算、大容量存儲和并行計算等多種功能,本文就來詳細講解一下AI服務器的作用&#xf…

[250508] Linux 內核瘦身:棄用 i486 及早期 586 CPU 支持

目錄 Linux 內核計劃精簡:將移除對古董級 CPU 的支持 Linux 內核計劃精簡:將移除對古董級 CPU 的支持 核心動態: Linux 內核開發社區正計劃一項重要的代碼清理工作,目標是移除對非常古老的 i486 及早期 586 (如早期奔騰) CPU 架構…

ROM詳解

一、ROM基礎原理 定義與特性 ROM(Read-Only Memory,只讀存儲器)是一種非易失性存儲器,數據在制造或編程后永久保存,斷電后不丟失。其核心特性為數據不可修改(或需特殊條件修改)。 存儲原理&…

解決虛擬機掛起之后的網絡問題

相信很多人都有遇到過自己在VM上面手滑點了個掛起然后就連不了網絡的情況吧,我也遇到了,下面是我的解決辦法,希望對大家有所幫助! 我運行完如下: 基本上出現綠色的就說明網絡連上啦!

在Star-CCM+中實現UDF并引用場數據和網格數據

在Star-CCM中實現UDF并引用場數據和網格數據 Star-CCM中的用戶自定義函數(UDF)允許用戶通過Java或C/C編程擴展軟件功能。下面我將詳細介紹如何實現UDF并引用模擬數據。 1. UDF基礎實現方法 1.1 創建UDF的步驟 在Star-CCM中,右鍵點擊"工具" → “用戶函…

ConnectionResetError(10054, ‘遠程主機強迫關閉了一個現有的連接,Python爬蟲

文章目錄 ConnectionResetError(10054, 遠程主機強迫關閉了一個現有的連接1.問題描述2.嘗試的解決方法(均未生效)2.1 請求重試機制2.2 模擬瀏覽器請求頭2.3 關閉連接資源2.4 延遲訪問 3.解決方案:使用 proxy_pool IP 代理池最后參考文章 Conn…

Redis相關命令詳解與原理(一)

目錄 Redis是什么? Redis 的特點和功能 Redis工作模式 與MySQL的區別 安裝編譯和啟動 redis的value類型編碼 string類型 基礎命令 應用 1.對象存儲 2.累加器 3.分布式鎖 4.位運算 list類型 基礎命令 應用 1.棧(先進后出 FILO&#xff0…

Starrocks 的 ShortCircuit短路徑

背景 本文基于 Starrocks 3.3.5 本文主要來探索一下Starrocks在FE端怎么實現 短路徑,從而加速點查查詢速度。 在用戶層級需要設置 enable_short_circuit 為true 分析 數據流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…

Oracle非歸檔模式遇到文件損壞怎么辦?

昨天夜里基地夜班的兄弟,打電話說有個報表庫連不上了,趕緊起來連上VPN查看一下,看到實例宕機了,先趕緊startup起來。 1.查看報錯信息 環境介紹:Redhat 6.9 Oracle 11.2.0.4 No Archive Mode 查看alert log 關鍵報…

關于一些平時操作系統或者軟件的步驟轉載

關于一些平時操作系統或者軟件的步驟轉載 關于python環境搭建 關于Ubuntu 1. 雙系統之Ubuntu快速卸載 2. VMware安裝Ubuntu虛擬機實現COpenCV代碼在虛擬機下運行教程 3. ubuntu 下 opencv的安裝以及配置(親測有效) 4. Ubuntu將c編譯成.so文件并測試 5…

hz2新建Keyword頁面

新建一個single-keywords.php即可,需要篩選項再建taxonomy-knowledge-category.php 參考:https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF創建了自定義產品分類products,現在想實現自定義產品分類下的…