From 3983986303804a189d55d85a3a23b4243609b3aa Mon Sep 17 00:00:00 2001 From: Steve Sun <1638650145@qq.com> Date: Fri, 18 Sep 2020 11:15:36 +0800 Subject: [PATCH] 20200918 --- API.md | 195 ++++++++++++++++++++++++++++++++++-------------------- README.md | 6 +- 2 files changed, 128 insertions(+), 73 deletions(-) diff --git a/API.md b/API.md index 83b4428..a98c4e4 100644 --- a/API.md +++ b/API.md @@ -517,7 +517,17 @@ np.argmax(a=arr, # 输入的数组|array_like axis=None) # 筛选所沿的维度|int|None|可选 ``` -## 6.5.asarray() +## 6.5.around() + +逐元素四舍五入取整|numpy.ndarray + +```python +import numpy as np +arr = [1.4, 1.6] +x = np.around(a=arr) # 输入的数组|array-like +``` + +## 6.6.asarray() 将输入转化为一个数组|numpy.ndarray @@ -528,7 +538,7 @@ nd_arr = np.asarray(a=arr, # 输入的数据|array-like dtype=None) # 元素的数据类型|data-type|None|可选 ``` -## 6.6.ceil() +## 6.7.ceil() 逐元素进行向上取整|numpy.float64(输入是数组时numpy.ndarray) @@ -538,7 +548,7 @@ arr = [5.1, 4.9] np.ceil(arr) # 输入数据|array_like ``` -## 6.7.concatenate() +## 6.8.concatenate() 按照指定维度合并多个数组|numpy.ndarray @@ -551,7 +561,7 @@ np.concatenate([arr1, arr2, arr3], # 要合并的数组|array-like axis=1) # 沿指定维度合并|int|0|可选 ``` -## 6.8.dot() +## 6.9.dot() 计算两个数组的点乘|numpy.ndarray @@ -562,7 +572,7 @@ arr2 = [[1], [2], [3]] np.dot(a=arr1, b=arr2) # 输入的数组|array-like ``` -## 6.9.equal() +## 6.10.equal() 逐个元素判断是否一致|numpy.bool_(输入是数组时numpy.ndarray) @@ -573,7 +583,7 @@ arr2 = [1, 2, 2] np.equal(arr1, arr2) # 输入的数组|array-like ``` -## 6.10.exp() +## 6.11.exp() 逐元素计算e的幂次|numpy.float64(输入是数组时numpy.ndarray) @@ -583,7 +593,7 @@ arr = [1, 2, 3] np.exp(arr) # 输入数据|array-like ``` -## 6.11.expand_dims() +## 6.12.expand_dims() 扩展数组的形状,增加维度|numpy.ndarray @@ -594,7 +604,7 @@ a = np.expand_dims(a=a, # 输入的数组|array-like axis=0) # 添加新维度的位置|int or tuple of ints ``` -## 6.12.eye() +## 6.13.eye() 生成一个单位阵|numpy.ndarray @@ -603,7 +613,7 @@ import numpy as np matrix = np.eye(N=3) # 矩阵的行数|int ``` -## 6.13.hstack() +## 6.14.hstack() 按照水平顺序合成一个新的数组|numpy.ndarray @@ -614,13 +624,13 @@ arr2 = [[5, 6], [5, 6]] a = np.hstack(tup=(arr1, arr2)) # 数组序列|array-like ``` -## 6.14.linalg +## 6.15.linalg | 版本 | 描述 | 注意 | | ---- | --------------------- | ---- | | - | numpy的线性代数函数包 | | -### 6.14.1.inv() +### 6.15.1.inv() 计算矩阵的逆|numpy.ndarray @@ -631,7 +641,7 @@ arr = [[1, 2], matrix = np.linalg.inv(a=arr) # 输入的矩阵|array_like ``` -### 6.14.2.norm() +### 6.15.2.norm() 计算范数|numpy.float64 @@ -642,7 +652,7 @@ np.linalg.norm(x=arr, # 输入的矩阵或向量|array_like(维数必须是1维 ord=1) # 范数选项|int or str(non-zero|int|inf|-inf|'fro'|'nuc')|None(计算2-范数)|可选 ``` -## 6.15.linspace() +## 6.16.linspace() 生成指定间隔内的等差序列|numpy.ndarray @@ -653,7 +663,7 @@ np.linspace(start=1, # 序列的起始值|array_like num=10) # 生成序列的样本的个数|int|50|可选 ``` -## 6.16.load() +## 6.17.load() 从npy、npz、pickled文件加载数组或pickled对象|array or tuple or dict @@ -664,7 +674,7 @@ np.load(file, # 文件|file-like object or string or pathlib.Path encoding) # 读取的编码方式|str|'ASCII'|可选 ``` -## 6.17.log() +## 6.18.log() 逐元素计算自然对数|numpy.float64(输入是数组时numpy.ndarray) @@ -673,7 +683,7 @@ import numpy as np np.log(1) # 输入数据|array_like ``` -## 6.18.log2() +## 6.19.log2() 逐元素计算以2为底对数|numpy.float64(输入是数组时numpy.ndarray) @@ -682,7 +692,7 @@ import numpy as np np.log2(1) # 输入数据|array_like ``` -## 6.19.mat() +## 6.20.mat() 将输入转换为一个矩阵|numpy.matrix @@ -693,7 +703,7 @@ matrix = np.mat(data=arr # 输入数据|array-like dtype=None) # 生成矩阵元素的数据类型|data-type|None|可选 ``` -## 6.20.matmul() +## 6.21.matmul() 两个数组的矩阵乘积|numpy.ndarray @@ -704,7 +714,7 @@ arr2 = [[1], [2], [3]] np.matmul(arr1, arr2) # 输入的数组|array-like(不能是标量) ``` -## 6.21.max() +## 6.22.max() 返回最大值或者沿着某一维度最大值|numpy.ndarray or scalar @@ -715,7 +725,7 @@ np.max(a=arr, # 输入的数组|array-like axis=None) # 所沿的维度|int|None|可选 ``` -## 6.22.maximum() +## 6.23.maximum() 返回数组逐个元素的最大值|numpy.ndarray @@ -726,7 +736,7 @@ arr2 = [1, 5, 2] np.maximum(arr1, arr2) # 输入的数组|array-like ``` -## 6.23.mean() +## 6.24.mean() 沿着指定维度计算均值|numpy.float64 @@ -737,7 +747,7 @@ np.mean(arr, # 输入的数组|array-like axis=None) # 所沿的维度|int or tuple of ints|None|可选 ``` -## 6.24.meshgrid() +## 6.25.meshgrid() 生成一个坐标矩阵|list of numpy.ndarray @@ -748,7 +758,7 @@ y_crood = np.linspace(0, 4, 5) vector_matrix = np.meshgrid(x_crood, y_crood) # 坐标向量|array_like ``` -## 6.25.nonzero() +## 6.26.nonzero() 返回非零元素的索引|tuple @@ -758,7 +768,7 @@ arr = np.asarray([1, 2, 3, 4, 0, 0, 5]) np.nonzero(a=arr) # 输入的数组|array-like ``` -## 6.26.ones() +## 6.27.ones() 创建一个指定为形状和类型的全一数组|numpy.ndarray @@ -768,7 +778,7 @@ arr = np.ones(shape=[2, 3], # 数组的形状|int or sequence of ints dtype=np.int8) # 数组元素的数据类型|data-type|numpy.float64|可选 ``` -## 6.27.power() +## 6.28.power() 逐个元素计算第一个元素的第二个元素次幂|scalar(输入是数组时numpy.ndarray) @@ -777,13 +787,13 @@ import numpy as np x = np.power(2.1, 3.2) # x1底数、x2指数|array_like ``` -## 6.28.random +## 6.29.random | 版本 | 描述 | 注意 | | ---- | ----------------------- | ---- | | - | numpy的随机数生成函数包 | | -### 6.28.1.normal() +### 6.29.1.normal() 生成正态分布的样本|numpy.ndarray or scalar @@ -792,7 +802,7 @@ import numpy as np arr = np.random.normal(size=[2, 3]) # 形状|int or tuple of ints|None(None则只返回一个数)|可选 ``` -### 6.28.2.permutation() +### 6.29.2.permutation() 随机置换序列|numpy.ndarray @@ -802,7 +812,7 @@ arr = [1, 2, 3, 4] arr = np.random.permutation(arr) # 输入的数组|array-like ``` -### 6.28.3.randint() +### 6.29.3.randint() 从给定区间[low, high)生成随机整数|int or numpy.ndarray @@ -812,7 +822,7 @@ np.random.randint(low=1, # 下界|int or array-like of ints high=10) # 上界|int or array-like of ints|None(如果high为None则返回区间[0, low))|可选 ``` -### 6.28.4.rand() +### 6.29.4.rand() 生成一个指定形状的随机数数组|float or numpy.ndarray @@ -821,7 +831,7 @@ import numpy as np arr = np.random.rand(2, 3) # 数组的维度|int|(如果形状不指定,仅返回一个随机的浮点数)|可选 ``` -### 6.28.5.randn() +### 6.29.5.randn() 生成一个指定形状的标准正态分布的随机数数组|float or numpy.ndarray @@ -830,7 +840,7 @@ import numpy as np arr = np.random.randn(2, 3) # 数组的维度|int|(如果形状不指定,仅返回一个随机的浮点数)|可选 ``` -### 6.28.6.seed() +### 6.29.6.seed() 设置随机数生成器的随机种子 @@ -839,7 +849,7 @@ import numpy as np np.random.seed(seed) # 随机种子|int|None|可选 ``` -## 6.29.ravel() +## 6.30.ravel() 展平一个数组|numpy.ndarray @@ -849,7 +859,7 @@ arr = np.asarray([[1, 2], [3, 4]]) np.ravel(a=arr) # 输入的数组|array-like ``` -## 6.30.reshape() +## 6.31.reshape() 返回一个具有相同数据的新形状的数组|numpy.ndarray @@ -860,7 +870,7 @@ np.reshape(a=arr, # 要改变形状的数组|array_like newshape=[2, 2]) # 新的形状|int or tuple of ints ``` -## 6.31.save() +## 6.32.save() 将数组转换为numpy保存进二进制的npy文件 @@ -872,7 +882,7 @@ np.save(file='arr.npy', # 文件名|file or str or pathlib.Path allow_pickle=True) # 允许使用pickle对象保存数组|bool|True|可选 ``` -## 6.32.sort() +## 6.33.sort() 返回排序数组的副本|numpy.ndarray @@ -882,7 +892,7 @@ arr = [1, 3, 2, 4] new_arr = np.sort(a=arr) # 要排序的数组|array_like ``` -## 6.33.split() +## 6.34.split() 将一个数组拆分为多个|list of ndarrays @@ -894,7 +904,7 @@ arr_list = np.split(ary=arr, # 要拆分的数组|numpy.ndarray axis=1) # 沿某维度分割|int|0|可选 ``` -## 6.34.sqrt() +## 6.35.sqrt() 逐元素计算e的幂次|numpy.float64(输入是数组时numpy.ndarray) @@ -904,7 +914,7 @@ arr = [1, 2, 3] np.sqrt(arr) # 输入数据|array_like ``` -## 6.35.squeeze() +## 6.36.squeeze() 删除数组中维度为一的维度|numpy.ndarray @@ -914,7 +924,7 @@ arr = [[1, 2, 3]] np.squeeze(arr) # 输入数据|array_like ``` -## 6.36.std() +## 6.37.std() 沿指定维度计算标准差|numpy.float64 @@ -925,7 +935,7 @@ np.std(a=arr, # 输入的数组|array-like axis=None) # 所沿的维度|int or tuple of ints|None|可选 ``` -## 6.37.sum() +## 6.38.sum() 沿指定维度求和|numpy.ndarray @@ -936,7 +946,7 @@ np.sum(arr, # 输入的数组|array-like axis=1) # 所沿的维度|int or tuple of ints|None|可选 ``` -## 6.38.transpose() +## 6.39.transpose() 对数组进行转置|numpy.ndarray @@ -955,7 +965,7 @@ arr = np.asarray([[1, 2], [3, 4]]) arr.T ``` -## 6.39.var() +## 6.40.var() 沿指定维度方差|numpy.ndarray @@ -966,7 +976,7 @@ np.var(arr, # 输入的数组|array-like axis=1) # 所沿的维度|int or tuple of ints|None|可选 ``` -##6.40.zeros() +##6.41.zeros() 创建一个指定为形状和类型的全零数组|numpy.ndarray @@ -2016,7 +2026,19 @@ model = EfficientNetB0(include_top=False, # 是否包含全连接输出层|bool input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -##### 11.9.1.1.2.EfficientNetB4() +##### 11.9.1.1.2.EfficientNetB3() + +EfficientNetB4的预训练模型|tensorflow.python.keras.engine.functional.Functional + +```python +from tensorflow.keras.applications.efficientnet import EfficientNetB4 +from tensorflow.keras.layers import Input +model = EfficientNetB3(include_top=False, # 是否包含全连接输出层|bool|True + weights='imagenet', # 初始化权重|'imagenet' or None or path|'imagenet' + input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) +``` + +##### 11.9.1.1.3.EfficientNetB4() EfficientNetB4的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2028,7 +2050,7 @@ model = EfficientNetB4(include_top=False, # 是否包含全连接输出层|bool input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -##### 11.9.1.1.3.EfficientNetB7() +##### 11.9.1.1.4.EfficientNetB7() EfficientNetB7的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2040,7 +2062,7 @@ model = EfficientNetB7(include_top=False, # 是否包含全连接输出层|bool input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -##### 11.9.1.1.4.preprocess_input() +##### 11.9.1.1.5.preprocess_input() 对一个批次的数据进行ImageNet格式的预处理|Preprocessed tensor or numpy.ndarray @@ -2049,9 +2071,21 @@ from tensorflow.keras.applications.efficientnet import preprocess_input input = preprocess_input(x) # 要处理的数据|Tensor or numpy.ndarray ``` -#### 11.9.1.2.inception_resnet_v2 +#### 11.9.1.2.imagenet_utils + +##### 11.9.1.2.1.preprocess_input() + +对一个批次的数据进行ImageNet格式的预处理|Preprocessed tensor or numpy.ndarray + +```python +from tensorflow.keras.applications.vgg19 import preprocess_input +input = preprocess_input(x, # 要处理的数据|Tensor or numpy.ndarray + mode) # 转换的模式|str|'caffe' +``` + +#### 11.9.1.3.inception_resnet_v2 -##### 11.9.1.2.1.InceptionResNetV2() +##### 11.9.1.3.1.InceptionResNetV2() InceptionResNetV2的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2063,9 +2097,9 @@ model = InceptionResNetV2(include_top=False, # 是否包含全连接输出层|b input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.3.inception_v3 +#### 11.9.1.4.inception_v3 -##### 11.9.1.3.1.InceptionV3() +##### 11.9.1.4.1.InceptionV3() InceptionV3的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2077,9 +2111,9 @@ model = InceptionV3(include_top=False, # 是否包含全连接输出层|bool|Tr input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.4.mobilenet_v2 +#### 11.9.1.5.mobilenet_v2 -##### 11.9.1.4.1.MobileNetV2() +##### 11.9.1.5.1.MobileNetV2() MobileNetV2的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2091,9 +2125,9 @@ model = MobileNetV2(include_top=False, # 是否包含全连接输出层|bool|Tr input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.5.resnet50 +#### 11.9.1.6.resnet50 -##### 11.9.1.5.1.ResNet50() +##### 11.9.1.6.1.ResNet50() ```python from tensorflow.keras.applications.resnet50 import ResNet50 @@ -2103,32 +2137,35 @@ model = ResNet50(include_top=False, # 是否包含全连接输出层|bool|True input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.6.resnet_v2 +#### 11.9.1.7.resnet_v2 -##### 11.9.1.6.1.ResNet152V2() +##### 11.9.1.7.1.ResNet50V2() -ResNet152V2的预训练模型|tensorflow.python.keras.engine.functional.Functional +ResNet50V2的预训练模型|tensorflow.python.keras.engine.functional.Functional ```python from tensorflow.keras.applications.resnet_v2 import ResNet152V2 from tensorflow.keras.layers import Input -model = ResNet152V2(include_top=False, # 是否包含全连接输出层|bool|True - weights='imagenet', # 初始化权重|'imagenet' or None or path|'imagenet' - input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) +model = ResNet50V2(include_top=False, # 是否包含全连接输出层|bool|True + weights='imagenet', # 初始化权重|'imagenet' or None or path|'imagenet' + input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.7.vgg19 - -##### 11.9.1.7.1.preprocess_input() +##### 11.9.1.7.2.ResNet152V2() -对一个批次的数据进行ImageNet格式的预处理|Preprocessed tensor or numpy.ndarray +ResNet152V2的预训练模型|tensorflow.python.keras.engine.functional.Functional ```python -from tensorflow.keras.applications.vgg19 import preprocess_input -input = preprocess_input(x) # 要处理的数据|Tensor or numpy.ndarray +from tensorflow.keras.applications.resnet_v2 import ResNet152V2 +from tensorflow.keras.layers import Input +model = ResNet152V2(include_top=False, # 是否包含全连接输出层|bool|True + weights='imagenet', # 初始化权重|'imagenet' or None or path|'imagenet' + input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -##### 11.9.1.7.2.VGG19() +#### 11.9.1.8.vgg19 + +##### 11.9.1.8.1.VGG19() VGG19的预训练模型|tensorflow.python.keras.engine.functional.Functional @@ -2140,9 +2177,9 @@ model = VGG19(include_top=False, # 是否包含全连接输出层|bool|True input_tensor=Input(shape=[224, 224, 3])) # 输入层|tensorflow.python.framework.ops.Tensor(layers.Input()) ``` -#### 11.9.1.8.xception +#### 11.9.1.9.xception -##### 11.9.1.8.1.Xception() +##### 11.9.1.9.1.Xception() ```python from tensorflow.keras.applications.xception import Xception @@ -2284,7 +2321,23 @@ CALLBACKS = [ ] ``` -#### 11.9.3.3.TensorBoard() +#### 11.9.3.3.ReduceLROnPlateau() + +实例化一个ReduceLROnPlateau,当评估停止变化的时候,降低学习率 + +```python +from tensorflow.keras.callbacks import ReduceLROnPlateau +CALLBACKS = [ + ReduceLROnPlateau(monitor='val_loss', # 监控的信息|str|'val_loss' + factor=0.1, # 学习率衰减因子|float|0.1(new_learning_rate = factor * learning_rate) + patience=5, # 监测容忍轮数(数据有小幅度波动可以跳过,验证频率也一定是1)|int|0 + verbose=1, # 日志模式|int(0, 1)|0 + min_delta=1e-3, # 最小变化量|float|0.0001 + min_lr=0) # 最小学习率|float|0 +] +``` + +#### 11.9.3.4.TensorBoard() 实例化一个TensorBoard,可视化训练信息 diff --git a/README.md b/README.md index aee2613..afeb358 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,6 @@ pip install classicML ``` -* 参考代码 comming soon - * 由于作者本人错误的之前上传一堆打包的pdf文件导致项目很大 1. 您如果只想看文档,请直接下载releases中的PDF,每次提交都会更新 @@ -24,3 +22,7 @@ * 欢迎交流 +## A²PI²代码🌰 + +1. [使用Keras构建CRNN](https://github.com/sun1638650145/CRNN) +2. coming soon \ No newline at end of file