Linux Patch 文件代码补丁

Patch文件是什么以及用途

【定义】Pathch: a small piece of code (= instructions that a computer can understand) which can be added to a computer program to improve it or to correct a fault. 修补程序;补丁;
【用途】顾名思义,Patch主要用途是给代码打补丁,一般用于(1)修正已知的错误,或者(2)作为一种调试手段来调试有问题的代码,发现问题和验证修正的结果。

Patch 操作及语法

Patch主要有两个操作,参考链接:https://www.shellhacks.com/create-patch-diff-command-linux/

  • diff主要用于比较新旧代码,生成patch文件,操作为$ diff -u OriginalFile UpdatedFile > PatchFile
  • patch将patch文件合并到原代码,操作为$ patch OriginalFile < PatchFile

查看帮助文件:$ diff --help

Patch 文件结构

补丁头

补丁头是分别由 —/+++ 开头的两行,用来表示要打补丁的文件。 开头表示旧文件, +++ 开头表示新文件。其中,一个patch文件可以有很多个补丁头。

--- unet.py	2022-08-20 12:22:39.713834077 +0200
+++ baseline_UNET3D.py	2022-08-20 12:22:03.482141847 +0200

补丁块

补丁块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以 @@ 开始,结束于另一个块的开始或者一个新的补丁头。

块会缩进一列(第一列),用来表示这一行是要增加还是要删除的。
+ 号表示这一行是要加上的。
- 号表示这一行是要删除的。
没有加号也没有减号表示这里只是引用的而不需要修改,用来定位。

@@ -204,12 +201,13 @@   # 原代码204行开始,共12行;新代码201行开始,共13行
     A helper Module that performs 2 convolutions and 1 MaxPool.
     A ReLU activation follows each convolution.
     """
-    def __init__(self, in_channels, out_channels, pooling=True, planar=False, activation='relu',
+    def __init__(self, in_channels, out_channels, dropout_rate, pooling=True, planar=False, activation='relu',  # 增加了一个dropout_rate 参数
                  normalization=None, full_norm=True, dim=3, conv_mode='same'):
         super().__init__()
 
         self.in_channels = in_channels
         self.out_channels = out_channels
+        self.dropout_rate = dropout_rate   # dropout_rate 传入参数
         self.pooling = pooling
         self.normalization = normalization
         self.dim = dim
@@ -232,21 +230,28 @@    # 原代码232行开始,共21行;新代码230行开始,共28行
             self.pool = nn.Identity()
             self.pool_ks = -123  # Bogus value, will never be read. Only to satisfy TorchScript's static type system
 
+        self.dropout = nn.Dropout3d(dropout_rate)   # dropout_rate 传入参数
+        
         self.act1 = get_activation(activation)
         self.act2 = get_activation(activation)
 
         if full_norm:
             self.norm0 = get_normalization(normalization, self.out_channels, dim=dim)
+            if VERBOSE: print("DownConv, full_norm, norm0 =", normalization) 
         else:
             self.norm0 = nn.Identity()
+            if VERBOSE: print("DownConv, no full_norm")
         self.norm1 = get_normalization(normalization, self.out_channels, dim=dim)
+        if VERBOSE: print("DownConv, norm1 =", normalization)
 
     def forward(self, x):
         y = self.conv1(x)
         y = self.norm0(y)
+        y =  self.dropout(y)  # 添加dropout层
         y = self.act1(y)
         y = self.conv2(y)
         y = self.norm1(y)
+        y =  self.dropout(y)   # 添加dropout层
         y = self.act2(y)
         before_pool = y
         y = self.pool(y)

参考链接

  1. 菜鸟教程-linux-comm-patch
  2. CSDN-patch文件的语法
  3. Weather4cast2022-models-unet.patch 示例

你可能感兴趣的:(python,linux)