实际应用效果不佳?来看看提升深度神经网络泛化能力的核心技术(附代码) ⛵

如何提高卷积神经网络模型的泛化能力 如何提高卷积神将网络模型的泛化能力 在做工程的时候如何提高自己训练出来的模型的泛化能力是一项具有挑战性同时也是一件充满"玄学"的事情。回想我这一年半载训练的那么几个任务的调参来讲,大概可以总结为下面这几点。 1、使用更多的数据。竟可能标注更多的训练数据,这是提高泛化能力最理想的方法,更多的数据让模型得到更充分的学习,自然提高了泛化能力,但实际场景中考虑到标注成本的问题,可能并不能无脑加数据。 2、... 阅读详情

💡 作者:韩信子@ShowMeAI
📘 深度学习实战系列:https://www.showmeai.tech/tutorials/42
📘 本文地址:https://www.showmeai.tech/article-detail/317
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏ShowMeAI查看更多精彩内容

神经网络是一种由神经元、层、权重和偏差组合而成的特殊机器学习模型,随着近些年深度学习的高速发展,神经网络已被广泛用于进行预测和商业决策并大放异彩。

神经网络之所以广受追捧,是因为它们能够在学习能力和性能方面远远超过任何传统的机器学习算法。 现代包含大量层和数十亿参数的网络可以轻松学习掌握互联网海量数据下的模式和规律,并精准预测。

随着AI生态和各种神经网络工具库(Keras、Tensorflow 和 Pytorch 等)的发展,搭建神经网络拟合数据变得非常容易。但很多时候,在用于学习的训练数据上表现良好的模型,在新的数据上却效果不佳,这是模型陷入了『过拟合』的问题中了,在本篇内容中,ShowMeAI将给大家梳理帮助深度神经网络缓解过拟合提高泛化能力的方法。

💡 数据增强

📌 技术介绍

缓解过拟合最直接的方法是增加数据量,在数据量有限的情况下可以采用数据增强技术。 数据增强是从现有训练样本中构建新样本的过程,例如在计算机视觉中,我们会为卷积神经网络扩增训练图像。

具体体现在计算机视觉中,我们可以对图像进行变换处理得到新突破,例如位置和颜色调整是常见的转换技术,常见的图像处理还包括——缩放、裁剪、翻转、填充、旋转和平移。

📌 手动数据处理&增强

我们可以基于PIL库手动对图像处理得到新图像以扩增样本量

from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("/content/drive/MyDrive/cat.jpg")
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT) ### 翻转
roated_img = img.transpose(Image.ROTATE_90) ## 旋转
scaled_img = img.resize((400, 400))  ### 图像缩放
cropped_img = img.crop((100,50,400,200)) # 裁剪
# 颜色变换
width, height = img.size
pad_pixel = 20
canvas = Image.new(img.mode, (width+pad_pixel, height+pad_pixel), 'blue')
canvas.paste(img, (pad_pixel//2,pad_pixel//2))

颜色增强处理通过改变图像的像素值来改变图像的颜色属性。更细一点讲,可以通过改变亮度、对比度、饱和度、色调、灰度、膨胀等来处理。

from PIL import Image, ImageEnhance
import matplotlib.pyplot as plt
img = Image.open("/content/drive/MyDrive/cat.jpg")
enhancer = ImageEnhance.Brightness(img)
img2 = enhancer.enhance(1.5)  ## 更亮
img3 = enhancer.enhance(0.5)  ## 更暗 
imageenhancer = ImageEnhance.Contrast(img)
img4 = enhancer.enhance(1.5) ## 提升对比度
img5 = enhancer.enhance(0.5) ## 降低对比度
enhancer = ImageEnhance.Sharpness(img)
img6 = enhancer.enhance(5) ## 锐化

虽然可以通过使用像 pillow 和 OpenCV 这样的图像处理库来手动执行图像增强,但更简单且耗时更少的方法是使用 📘Keras API 来完成。

关于keras的核心知识,ShowMeAI为其制作了速查手册,欢迎大家通过如下文章快查快用:

Keras 是一个用 Python 编写的深度学习 API,可以运行在机器学习平台 Tensorflow 之上。 Keras 有许多可提高实验速度的内置方法和类。 在 Keras 中,我们有一个 📘ImageDataGenerator类,它为图像增强提供了多个选项。

keras.preprocessing.image.ImageDataGenerator()

📘参数:

  • featurewise_center: 布尔值。将输入数据的均值设置为 0,逐特征进行。
  • samplewise_center: 布尔值。将每个样本的均值设置为 0。
  • featurewise_std_normalization: Boolean. 布尔值。将输入除以数据标准差,逐特征进行。
  • samplewise_std_normalization: 布尔值。将每个输入除以其标准差。
  • zca_epsilon: ZCA 白化的 epsilon 值,默认为 1e-6。
  • zca_whitening: 布尔值。是否应用 ZCA 白化。
  • rotation_range: 整数。随机旋转的度数范围。
  • width_shift_range: 浮点数、一维数组或整数
    • float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。
    • 1-D 数组: 数组中的随机元素。
    • int: 来自间隔 (-width_shift_range, +width_shift_range) 之间的整数个像素。
    • width_shift_range=2 时,可能值是整数 [-1, 0, +1],与 width_shift_range=[-1, 0, +1] 相同;而 width_shift_range=1.0 时,可能值是 [-1.0, +1.0) 之间的浮点数。
  • height_shift_range: 浮点数、一维数组或整数
    • float: 如果 <1,则是除以总宽度的值,或者如果 >=1,则为像素值。
    • 1-D array-like: 数组中的随机元素。
    • int: 来自间隔 (-height_shift_range, +height_shift_range) 之间的整数个像素。
    • height_shift_range=2 时,可能值是整数 [-1, 0, +1],与 height_shift_range=[-1, 0, +1] 相同;而 height_shift_range=1.0 时,可能值是 [-1.0, +1.0) 之间的浮点数。
  • shear_range: 浮点数。剪切强度(以弧度逆时针方向剪切角度)。
  • zoom_range: 浮点数 或 [lower, upper]。随机缩放范围。如果是浮点数,[lower, upper] = [1-zoom_range, 1+zoom_range]。
  • channel_shift_range: 浮点数。随机通道转换的范围。
  • fill_mode: {“constant”, “nearest”, “reflect” or “wrap”} 之一。默认为 ‘nearest’。输入边界以外的点根据给定的模式填充。
  • cval: 浮点数或整数。用于边界之外的点的值,当 fill_mode = "constant" 时。
  • horizontal_flip: 布尔值。随机水平翻转。
  • vertical_flip: 布尔值。随机垂直翻转。
  • rescale: 重缩放因子。默认为 None。如果是 None 或 0,不进行缩放,否则将数据乘以所提供的值(在应用任何其他转换之前)。
  • preprocessing_function: 应用于每个输入的函数。这个函数会在任何其他改变之前运行。这个函数需要一个参数:一张图像(秩为 3 的 Numpy 张量),并且应该输出一个同尺寸的 Numpy 张量。
  • data_format: 图像数据格式,{“channels_first”, “channels_last”} 之一。“channels_last” 模式表示图像输入尺寸应该为 (samples, height, width, channels),“channels_first” 模式表示输入尺寸应该为 (samples, channels, height, width)。默认为 在 Keras 配置文件 ~/.keras/keras.json 中的 image_data_format 值。如果你从未设置它,那它就是 “channels_last”。
  • validation_split: 浮点数。Float. 保留用于验证的图像的比例(严格在0和1之间)。
  • dtype: 生成数组使用的数据类型。

📌 基于 TensorFlow 的数据增强

如果要基于 TensorFlow 实现数据增强,示例代码如下:

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        brightness_range= [0.5, 1.5],
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.4,
        horizontal_flip=True,
        fill_mode='nearest',
        zca_epsilon=True)

path = '/content/drive/MyDrive/cat.jpg' ## Image Path
img = load_img(f"{path}")
x = img_to_array(img)
x = x.reshape((1,) + x.shape)
i = 0

### 基于数据增强构建25张图片并存入aug_img文件夹
for batch in datagen.flow(x, batch_size=1, save_to_dir="/content/drive/MyDrive/aug_imgs", save_prefix='img', save_format='jpeg'):
    i += 1
    if i > 25:
        break 

💡 Dropout 随机失活

关于随机失活的详细原理知识,大家可以查看ShowMeAI制作的深度学习系列教程和对应文章

📌 技术介绍

Dropout 层是解决深度神经网络中过度拟合的最常用方法。 它通过动态调整网络来减少过拟合的概率。

Dropout 层 随机 在训练阶段以概率rate随机将输入单元丢弃(可以认为是对输入置0),未置0的输入按 1/(1 - rate) 放大,以使所有输入的总和保持不变。

丢弃率rate 是主要参数,范围从 0 到 1。0.5 的rate取值意味着 50% 的神经元在训练阶段从网络中随机丢弃。

TensorFlow中的dropout使用方式如下

tf.keras.layers.Dropout(rate, noise_shape=None, seed=None)

📘参数

  • rate: 在 0 和 1 之间浮动,丢弃概率。
  • noise_shape:1D 整数张量,表示将与输入相乘的二进制 dropout 掩码的形状。
  • seed: 随机种子。

📌 基于TensorFlow应用Dropout

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Reshape
from tensorflow.keras.layers import Dropout

def create_model():
  model = Sequential()
  model.add(Dense(60, input_shape=(60,), activation='relu'))
  model.add(Dropout(0.2))
  model.add(Dense(30, activation='relu'))
  model.add(Dropout(0.2))
  model.add(Dense(1, activation='sigmoid'))
  return model
  
adam = tf.keras.optimizers.Adam()
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])

model = create_model()
model.summary()

在向神经网络添加 dropout 层时,有一些技巧大家可以了解一下:

  • 一般会使用 20%-50% 的小的 dropout 值,太大的 dropout 值可能会降低模型性能,同时选择非常小的值不会对网络产生太大影响。
  • 一般在大型网络中会使用dropout层以获得最大性能。
  • 输入层和隐层上都可以使用 dropout,表现都良好。

💡 L1 和 L2 正则化

关于正则化的详细原理知识,大家可以查看ShowMeAI制作的深度学习系列教程和对应文章

📌 技术介绍

正则化是一种通过惩罚损失函数来降低网络复杂性的技术。 它为损失函数添加了一个额外的权重约束部分,它在模型过于复杂的时候会进行惩罚(高loss),简单地说,正则化限制权重幅度过大。

L1 正则化的公式如下:

L2 正则化公式如下:

📌 基于TensorFlow应用正则化

在TensorFlow搭建神经网络时,我们可以直接在添加对应的层次时,通过参数设置添加正则化项。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Reshape
from tensorflow.keras.layers import Dropout

def create_model():
  # 构建模型
  model = Sequential()
  # 添加正则化
  model.add(Dense(60, input_shape=(60,), activation='relu',  kernel_regularizer=keras.regularizers.l1(0.01)))
  model.add(Dropout(0.2))
  # 添加正则化
  model.add(Dense(30, activation='relu',  kernel_regularizer=keras.regularizers.l2(0.001)))
  model.add(Dropout(0.2))
  model.add(Dense(1, activation='sigmoid'))
  return model


adam = tf.keras.optimizers.Adam()
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])

model = create_model()
model.summary()

💡 Early Stopping / 早停止

📌 技术介绍

在深度学习中,一个 epoch指的是完整训练数据进行一轮的训练。迭代轮次epoch的多少对于模型的状态影响很大:如果我们的 epoch 设置太大,训练时间越长,也更可能导致模型过拟合;但过少的epoch可能会导致模型欠拟合。

Early stopping早停止是一种判断迭代轮次的技术,它会观察验证集上的模型效果,一旦模型性能在验证集上停止改进,就会停止训练过程,它也经常被使用来缓解模型过拟合。

📌 基于TensorFlow应用Early stopping

Keras 有一个回调函数,可以直接完成early stopping。

from tensorflow.keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(
    monitor='val_loss',
    min_delta=0,
    patience=0,
    verbose=0,
    mode='auto',
    baseline=None,
    restore_best_weights=False
)

📘参数

  • monitor: 被监测的数据。
  • min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。
  • patience: 没有进步的训练轮数,在这之后训练就会被停止。
  • verbose: 详细信息模式。
  • mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。
  • baseline: 要监控的数量的基准值。 如果模型没有显示基准的改善,训练将停止。
  • restore_best_weights: 是否从具有监测数量的最佳值的时期恢复模型权重。 如果为 False,则使用在训练的最后一步获得的模型权重。
from tensorflow.keras.callbacks import EarlyStoppingearly_stopping = EarlyStopping(monitor='loss', patience=2)history = model.fit(
    X_train,
    y_train,
    epochs= 100,
    validation_split= 0.20,
    batch_size= 50,
    verbose= "auto",
    callbacks= [early_stopping]
)

💡 总结

ShowMeAI在本篇内容中,对缓解过拟合的技术做了介绍和应用讲解,大家可以在实践中选择和使用。『数据增强』技术将通过构建和扩增样本集来缓解模型过拟合,dropout 层通过随机丢弃一些神经元来降低网络复杂性,正则化技术将惩罚网络训练得到的大幅度的权重,early stopping 会防止网络过度训练和学习。

参考资料

机器学习系列(10)_如何提高深度学习(和机器学习)的性能 我经常被问到诸如`如何从深度学习模型中得到更好的效果`的问题,类似的问题还有:我如何提升准确度,如果我的神经网络模型性能不佳,我能够做什么? 对于这些问题,我经常这样回答,“我并不知道确切的答案,但是我有很多思路”,接着我会列出了我所能想到的所有**或许能够给性能带来提升**的思路,。 为避免一次次罗列出这样一个简单的列表,我决定把所有想法详细写在这篇博客里。 这些思路应该是通用的 阅读详情

相关推荐

思考深度学习的泛化能力

神经网络通过记忆学习 传统观点 论文观点 论文实验 神经网络 不 通过记忆学习 参考资料深度神经网络往往带有大量的参数,但依然表现出很强的泛化能力(指训练好的模型在未见过的数据上的表现)。深度神经网络为何会拥有如此强的泛化能力?最近,两篇论文引起了广泛思考。神经网络通过记忆学习《Understanding deep learning requires rethinking generalizatio

shuzfan的专栏 2万+

模型优化_如何提高网络/模型的泛化能力?(全面)

提高神经网络的泛化能力。

惊鸿一博 1万+

【Flink】Flink状态的缩放(rescale)与键组(Key Group)设计

1.概述 转载:Flink状态的缩放(rescale)与键组(Key Group)设计 这个东东还没了解过。来看一下。 在之前那篇讲解Flink Timer的文章里,我曾经用三言两语简单解释了Key Group和KeyGroupRange的概念。实际上,Key Group是Flink状态机制中的一个重要设计,值得专门探究一下。本文先介绍Flink状态的理念,再经由状态——主要是Keyed State——的缩放(rescale)引出KeyGroup的细节。 2.再认识Flink状态 自从开始写关于Flink.

九师兄 1539

神经网络预测收敛很好,但是泛化能力较弱,是什么原因

神经网络在训练过程中,通常会较好地拟合训练数据,但是泛化能力较弱,即在测试数据上的表现不如在训练数据上。这是因为神经网络在训练过程中,会对训练数据进行拟合,从而得到较低的训练误差,但是这种拟合往往是特别针对训练数据的,对于新的数据,尤其是测试数据,表现不一定很好。因此,泛化能力较弱是指在测试数据上的表现不如在训练数据上。 泛化能力较弱的原因可能有很多,包括: 训练数据不充分:如果训练数据不够丰富...

weixin_35750747的博客 878

如何提高卷积神经网络的泛化能力

在这个示例中,我们使用了CIFAR-10数据集,定义了一个简单的卷积神经网络模型,并在训练过程中应用了数据增强(随机裁剪和水平翻转)和正则化(标准化)。通过在训练数据上应用随机的变换,如平移、旋转、缩放、翻转等,可以生成更多多样化的训练样本,从而增加模型的泛化性能。使用正则化方法,如L1/L2正则化、Dropout等,可以减少模型的过拟合风险,从而提高泛化能力。对于高维数据,选择最相关的特征可以减少噪声的影响,提高模型的泛化性能。适当地减少模型的复杂性,避免过拟合,可以提高模型的泛化性能。

优快云 精品推荐 699

提高网络泛化能力,过拟合

方法 说明 使用更多数据 在有条件的前提下,尽可能多地获取训练数据是最理想的方法,更多的数据可以让模型得到充分的学习,也更容易提高泛化能力 使用更大批次 在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定 调整数据分布 大多数场景下的数据分布是不均匀的,模型过多地学习某类数据容易导致其输出结果偏向于该...

Jiashilin 6425

神经网络泛化的能力因素,神经网络泛化的能力差

3、再次就是样本数据的规模,也就是你要问的问题。由于样本规模直接影响计算机的运算时间,所以在精度符合要求的情况下,我们不需要过多的样本数据,否则我们要等待很久的训练时间。补充说明一下,不论是径向基(rbf)神经网络还是经典的bp神经网络,都只是具体的训练方法,对于足够多次的迭代,训练结果的准确度是趋于一致的,方法只影响计算的收敛速度(运算时间),和样本规模没有直接关系。对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。

aifans_bert的博客 3984

GEO优化内容营销策略:从规划到落地的全流程指南

GEO内容营销是通过地域化内容提升本地搜索排名、增加流量和转化率的策略。核心包括:构建本地用户画像,挖掘需求关键词;策划本地文化融合、案例研究等多样化内容;通过网站、社交媒体、本地KOL等渠道精准分发;优化本地关键词和视觉元素;监测数据并动态调整。案例显示,咖啡馆、工业企业和服装品牌通过本地化短视频、KOL合作及社群运营,显著提升了搜索排名、客流量和销售额。关键原则是内容本地化、精准分发、KOL合作、激励用户生成内容及数据驱动优化,实现高效本地市场渗透。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1329

机器学习实战教程(九):模型泛化

模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中,我们通常会将已有的数据集划分为训练集和测试集,使用训练集训练模型,然后使用测试集来评估模型的性能。模型在训练集上表现得好,并不一定能在测试集或实际应用中表现得好。因此,我们需要保证模型具有良好的泛化能力,才能确保其在实际场景中的效果。为了提高模型的泛化能力,我们通常需要采取一系列措施,例如增加数据集的大小、特征选择、特征缩放、正则化、交叉验证等。通过这些方法可以减少模型的过拟合,提高对新数据的预测能力。

liaomin416100569的专栏 7681

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1805

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 362

如何训练神经网络?常用的训练算法和优化方法有哪些?

梯度下降是最常用的优化方法,而随机梯度下降、批量梯度下降和小批量梯度下降可以提高训练速度和模型的泛化能力。神经网络通过计算预测结果与真实结果之间的差异,并逆向传播这个差异,调整网络中每个神经元的权重和偏差,以提高网络的准确性。梯度下降算法通过计算损失函数关于参数的梯度,然后沿着梯度的反方向更新参数,逐步降低损失函数的值,从而优化网络的性能。

m0_74693860的博客 929

S32K144驱动TPS929120避坑实录:从原理图设计到PWM调光漏电流的完整解决流程

本文详细解析了S32K144驱动TPS929120在车规LED驱动中的常见问题与解决方案,重点解决了PWM调光漏电流的行业难题。从原理图设计、FlexWire通信到软件调试,提供了一套完整的工程化避坑指南,特别针对车规MCU应用中的温度漂移、地址冲突等痛点给出了实用建议。

weixin_30872157的博客 561

如何提高神经网络的泛化能力?八大要点掌握

提高神经网络的泛化能力 1. 使用更多数据 在有条件的前提下,尽可能多地获取训练数据是最理想的方法,更多的数据可以让模型得到充分的学习,也更容易提高泛化能力。 2. 使用更大批次 在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定。 3. 调整数据分布 大多数场景下的数据分布是不均匀的,模型过多地学习某类数据容易导致其输出结果偏向于该类型的数据,此时通过调整输入的数据分布可以一定程度提高泛化能力。 4. 调整目标函数 在某些情况下,目标函数的选择

frighting_ing的博客 1万+

层层剥开Allegro skill--快速抓取并写入Allegro软件【呕血创作,转载注明】

Allegro skill eda pcb

qq_36492361的博客 1253

Win11右下角不显示图标怎么办?Win11右下角不显示图标的解决方法

所以有不少符合资格的小伙伴都下载进行体验了,但是有的小伙伴在升级完系统之后发现桌面右下角不显示任何图标,那么遇到这种情况要怎么办呢?下面就和小编一起来看看有什么解决方法吧。2、接着找到任务栏设置中的“taskbar corner overflow”。3、然后在下方勾选打开想要显示的图标程序就可以了。1、首先右键任务栏,在其中选择“任务栏设置”。目前微软已经正式推出了。

2401_88800025的博客 885

深度学习mindspore --- rescale(rescale, shift)

class mindspore.dataset.transforms.vision.c_transforms.Rescale(rescale,shift)[source] Tensor operation torescalethe input image. Parameters rescale(float) –Rescalefactor. shift(float) – Shift factor. 这个函数的意思很多种: 1, rescale是尺度...

my_share的专栏 4080

YOLOv8改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。通过本文你能够了解到DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加(DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPs)。

Snu77的博客 9571

rescale

function y = rescale(x,a,b) % rescale - rescale data in [a,b] % % y = rescale(x,a,b); % % Copyright (c) 2004 Gabriel Peyr� if nargin<2 a = 0; end if nargin<3 b = 1; end m = min(x(:)); M

十年磨一剑 6243

C#与倍福TwinCAT3通信实战:ADS协议封装与设备变量读写完整源码

倍福(Beckhoff)TwinCAT3 作为工业自动化领域主流的软PLC系统,其内置的ADS(Automation Device Specification)协议是实现上位机与TwinCAT3通信的核心标准。传统ADS通信开发存在门槛高(协议细节复杂)、稳定性差(缺乏统一异常处理)、复用性低(重复编码)等问题。本文基于 C# 技术栈,聚焦“协议封装标准化、变量读写易用化、通信稳定工业化”核心需求,提供一套完整的 ADS 协议封装方案与设备变量读写源码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1987

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

R语言-学习过程中记录的常用的函数

以下是我在R语言学习过程中遇到问题时常用的函数及使用方法,温故而知新,没事看一看不仅能加深印象,还可以更加灵活地结合基础函数实现灵活的运用。 a &lt;- (1:9) #定义a数据集 sum (a) #a的总和 c (1:9)+c(1:9) #向量相加 c (1,2,3,4,5)+c(1,2) #注意该例 c (2,4,1,3)&gt;c(6,2) #向量相比,返回布尔值 exp ...

数据之旅的点点滴滴 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

flink keyby、shuffle、 rebalance、rescale、 broadcast、global、自定义分区算子以及各分区器源码

   Flink中keyBy是一种按照键的哈希值来进行重新分区的操作,至于分区是否均匀、每个key 的数据具体会分到哪一区无法控制,因此keyBy 是一种逻辑分区(logical partitioning)操作。只有(physical partitioning),才真正控制分区策略精准地调配数据。   物理分区与 keyBy 另一大区别在于,keyBy 之后得到的是一个 KeyedStream,而物理分区之后结果仍是 DataStream,且流中元素数据类型保持不变。分区算子并不对数据进行转换处理,只是定义

不是一枚开发 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

DataStream API(三)

如果我们想将数据存储到我们自己的存储设备中,而 Flink 并没有提供可以直接使用的连接器,又该怎么办呢?与 Source 类似,Flink 为我们提供了通用的 SinkFunction 接口和对应的 RichSinkDunction抽象类,只要实现它,通过简单地调用 DataStream 的.addSink()方法就可以自定义写入任何外 部存储。之前与外部系统的连接,其实都是连接器帮我们实现了 SinkFunction,现在既然没有 现成的,我们就只好自力更生了。例如,

JiaXingNashishua的博客 1748

机器学习--提高神经网络的泛化能力

***泛化能力***是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。 在实际情况中,我们通常通过测试误差来评价学习方法的泛化能力。 泛化能力的性质 通常期望经训练样本训练的网络具有较强的泛化能力,也就是对新输入给出合理响应的能力。应当指出并非训练的次数越多越能得到正确的输入输出映射关...

qq_33472146的博客 5705

深度学习与神经网络全局概览:核心技术的发展历程

随着神经网络的进化,许多过去曾被认为不可想象的任务现在也能够被完成了。图像识别、语音识别、寻找数据集中的深度关系等任务现在已经变得远远更加简单了。在此向这一领域的杰出的研究者致以真诚的谢意,正是他们的发现和成果帮助我们利用上了神经网络的真正力量。 如果你真正对追求机器学习这一门学科感兴趣,你必需要对深度学习网络有透彻的理解。大部分机器学习算法在处理具有多个变量的数据集时往往会有准确度下降

han____shuai的专栏 4086

神经网络中的过拟合的原因及解决方法、泛化能力、L2正则化

过拟合:训练好的神经网络对训练数据以及验证数据拟合的很好,accuracy很高,loss很低,但是在测试数据上效果很差,即出现了过拟合现象。 过拟合产生的原因: (1)数据集有噪声 (2)训练数据不足 (3)训练模型过度导致模型非常复杂 解决方法: (1)降低模型复杂度(缩小宽度和减小深度) (2)数据集扩增(平移,旋转,缩放,剪切,添加噪音) (3)正则化。 (4)加入drou...

coderecord的博客 8815
上一篇: 只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模 ⛵
下一篇: 2022极端高温!人工智能如何预测森林火灾?| 万物AI
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值