深度學習故障診斷方法:殘差收縮網絡

2021-01-14 閃念基因

殘差收縮網絡是應用在機械故障診斷領域的一種深度學習方法,其實是殘差網絡、注意力機制和軟閾值化的結合。

殘差收縮網絡的工作原理,可以解釋為: 通過注意力機制注意到不重要的特徵,通過軟閾值函數將它們置為零;或者說,通過注意力機制注意到重要的特徵,將它們保留下來,加強深度神經網絡從含噪信號中提取有用特徵的能力 。

1.為什麼要提出殘差收縮網絡呢?

首先,在對樣本進行分類的時候,樣本中不可避免地會有一些噪聲,就像高斯噪聲、粉色噪聲、拉普拉斯噪聲等。更廣義地講,樣本中很可能包含著與當前分類任務無關的信息,這些信息也可以理解為噪聲。這些噪聲可能會對分類效果產生不利的影響。(軟閾值化是許多信號降噪算法中的一個關鍵步驟)

舉例來說,在路邊聊天的時候,聊天的聲音裡可能會混雜車輛的鳴笛聲、車輪聲等等。當對這些聲音信號進行語音識別的時候,識別效果不可避免地會受到鳴笛聲、車輪聲的影響。從深度學習的角度來講,這些鳴笛聲、車輪聲所對應的特徵,就應該在深度神經網絡內部被刪除掉,以避免對語音識別的效果造成影響。

其次,即使是同一個樣本集,各個樣本的噪聲量也往往是不同的。(這和注意力機制有相通之處;以一個圖像樣本集為例,各張圖片中目標物體所在的位置可能是不同的;注意力機制可以針對每一張圖片,注意到目標物體所在的位置)

例如,在訓練貓狗分類器時,對於標籤為「狗」的5張圖像,第1張圖像可能同時包含著狗和老鼠,第2張圖像可能同時包含著狗和鵝,第3張圖像可能同時包含著狗和雞,第4張圖像可能同時包含著狗和驢,第5張圖像可能同時包含著狗和鴨子。我們在訓練貓狗分類器的時候,就不可避免地會受到老鼠、鵝、雞、驢和鴨子等無關物體的幹擾,造成分類準確率下降。如果我們能夠注意到這些無關的老鼠、鵝、雞、驢和鴨子,將它們所對應的特徵刪除掉,就有可能提高貓狗分類器的精度。

2.軟閾值化是許多信號降噪算法的核心步驟

軟閾值化,是很多降噪算法的核心操作,將絕對值低於某個閾值的特徵刪除掉,將絕對值高於這個閾值的特徵朝著零進行收縮。

它可以通過如下公式來實現:

軟閾值化的輸出對於輸入的導數為

由上可知,軟閾值化的導數要麼是1,要麼是0。這個性質是和ReLU激活函數是相同的。因此,軟閾值化也能夠減小深度學習算法遭遇梯度彌散和梯度爆炸的風險。

在軟閾值化中,閾值的設置需要滿足兩個的條件:第一,閾值是正數;第二,閾值不能大於輸入信號的最大值,否則輸出會全部為零。

同時,閾值最好還能符合第三個條件:每個樣本應該根據自身的噪聲含量,有著自己獨立的閾值。

這是因為,很多樣本的噪聲含量經常是不同的。例如經常會有這種情況,在同一個樣本集裡面,樣本A所含噪聲較少,樣本B所含噪聲較多。那麼,如果是在降噪算法裡進行軟閾值化的時候,樣本A就應該採用較大的閾值,樣本B就應該採用較小的閾值。在深度神經網絡中,雖然這些特徵和閾值失去了明確的物理意義,但是基本的道理還是相通的。也就是說,每個樣本應該根據自身的噪聲含量,有著自己獨立的閾值。

3.注意力機制

注意力機制在計算機視覺領域是比較容易理解的。動物的視覺系統可以快速掃描全局區域,發現目標物體,進而將注意力集中在目標物體上,以提取更多的細節,同時抑制無關信息。具體請參照注意力機制方面的文章。

Squeeze-and-Excitation Network(SENet)是一種較新的注意力機制下的深度學習算法。在不同的樣本中,不同的特徵通道,在分類任務中的貢獻大小,往往是不同的。SENet採用一個小型的子網絡,獲得一組權重,進而將這組權重與各個通道的特徵分別相乘,以調整各個通道特徵的大小。這個過程,就可以認為是在施加不同大小的注意力在各個特徵通道上。

在這種方式下,每一個樣本,都會有自己獨立的一組權值。換而言之,任意的兩個樣本,它們的權重,都是不同的。在SENet中,獲得權重的具體路徑是,「全局池化→全連接層→ReLU函數→全連接層→Sigmoid函數」。

4.深度注意力機制下的軟閾值化

殘差收縮網絡借鑑了上述SENet的子網絡結構,以實現深度注意力機制下的軟閾值化。通過藍色框內的子網絡,就可以學習得到一組閾值,對各個特徵通道進行軟閾值化。

在這個子網絡中,首先對輸入特徵圖的所有特徵,求它們的絕對值。然後經過全局均值池化和平均,獲得一個特徵,記為A。在另一條路徑中,全局均值池化之後的特徵圖,被輸入到一個小型的全連接網絡。這個全連接網絡以Sigmoid函數作為最後一層,將輸出歸一化到0和1之間,獲得一個係數,記為α。最終的閾值可以表示為α×A。因此,閾值就是,一個0和1之間的數字×特徵圖的絕對值的平均。這種方式,不僅保證了閾值為正,而且不會太大。

而且,不同的樣本就有了不同的閾值。因此,在一定程度上,可以理解成一種特殊的注意力機制:注意到與當前任務無關的特徵,通過軟閾值化,將它們置為零;或者說,注意到與當前任務有關的特徵,將它們保留下來。

最後,堆疊一定數量的基本模塊以及卷積層、批標準化、激活函數、全局均值池化以及全連接輸出層等,就得到了完整的殘差收縮網絡。

5.殘差收縮網絡或許有著更廣泛的通用性

殘差收縮網絡事實上是一種通用的特徵學習方法。這是因為很多特徵學習的任務中,樣本中或多或少都會包含一些噪聲,以及不相關的信息。這些噪聲和不相關的信息,有可能會對特徵學習的效果造成影響。例如說:

在圖片分類的時候,如果圖片同時包含著很多其他的物體,那麼這些物體就可以被理解成「噪聲」;殘差收縮網絡或許能夠藉助注意力機制,注意到這些「噪聲」,然後藉助軟閾值化,將這些「噪聲」所對應的特徵置為零,就有可能提高圖像分類的準確率。

在語音識別的時候,如果在聲音較為嘈雜的環境裡,比如在馬路邊、工廠車間裡聊天的時候,殘差收縮網絡也許可以提高語音識別的準確率,或者給出了一種能夠提高語音識別準確率的思路。

6.Keras和TFLearn程序

本程序以圖像分類為例,構建了小型的殘差收縮網絡,超參數也未進行優化。為追求高準確率的話,可以適當增加深度,增加訓練迭代次數,以及適當調整超參數。

下面是Keras程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 28 23:24:05 2019
Implemented using TensorFlow 1.0.1 and Keras 2.2.1

M. Zhao, S. Zhong, X. Fu, et al., Deep Residual Shrinkage Networks for Fault Diagnosis,
IEEE Transactions on Industrial Informatics, 2019, DOI: 10.1109/TII.2019.2943898
@author: super_9527
"""

from __future__ import print_function
import keras
import numpy as np
from keras.datasets import mnist
from keras.layers import Dense, Conv2D, BatchNormalization, Activation
from keras.layers import AveragePooling2D, Input, GlobalAveragePooling2D
from keras.optimizers import Adam
from keras.regularizers import l2
from keras import backend as K
from keras.models import Model
from keras.layers.core import Lambda
K.set_learning_phase(1)

# Input image dimensions
img_rows, img_cols = 28, 28

# The data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)

# Noised data
x_train = x_train.astype('float32') / 255. + 0.5*np.random.random([x_train.shape[0], img_rows, img_cols, 1])
x_test = x_test.astype('float32') / 255. + 0.5*np.random.random([x_test.shape[0], img_rows, img_cols, 1])
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)


def abs_backend(inputs):
return K.abs(inputs)

def expand_dim_backend(inputs):
return K.expand_dims(K.expand_dims(inputs,1),1)

def sign_backend(inputs):
return K.sign(inputs)

def pad_backend(inputs, in_channels, out_channels):
pad_dim = (out_channels - in_channels)//2
inputs = K.expand_dims(inputs,-1)
inputs = K.spatial_3d_padding(inputs, ((0,0),(0,0),(pad_dim,pad_dim)), 'channels_last')
return K.squeeze(inputs, -1)

# Residual Shrinakge Block
def residual_shrinkage_block(incoming, nb_blocks, out_channels, downsample=False,
downsample_strides=2):

residual = incoming
in_channels = incoming.get_shape().as_list()[-1]

for i in range(nb_blocks):

identity = residual

if not downsample:
downsample_strides = 1

residual = BatchNormalization()(residual)
residual = Activation('relu')(residual)
residual = Conv2D(out_channels, 3, strides=(downsample_strides, downsample_strides),
padding='same', kernel_initializer='he_normal',
kernel_regularizer=l2(1e-4))(residual)

residual = BatchNormalization()(residual)
residual = Activation('relu')(residual)
residual = Conv2D(out_channels, 3, padding='same', kernel_initializer='he_normal',
kernel_regularizer=l2(1e-4))(residual)

# Calculate global means
residual_abs = Lambda(abs_backend)(residual)
abs_mean = GlobalAveragePooling2D()(residual_abs)

# Calculate scaling coefficients
scales = Dense(out_channels, activation=None, kernel_initializer='he_normal',
kernel_regularizer=l2(1e-4))(abs_mean)
scales = BatchNormalization()(scales)
scales = Activation('relu')(scales)
scales = Dense(out_channels, activation='sigmoid', kernel_regularizer=l2(1e-4))(scales)
scales = Lambda(expand_dim_backend)(scales)

# Calculate thresholds
thres = keras.layers.multiply([abs_mean, scales])

# Soft thresholding
sub = keras.layers.subtract([residual_abs, thres])
zeros = keras.layers.subtract([sub, sub])
n_sub = keras.layers.maximum([sub, zeros])
residual = keras.layers.multiply([Lambda(sign_backend)(residual), n_sub])

# Downsampling using the pooL-size of (1, 1)
if downsample_strides > 1:
identity = AveragePooling2D(pool_size=(1,1), strides=(2,2))(identity)

# Zero_padding to match channels
if in_channels != out_channels:
identity = Lambda(pad_backend, arguments={'in_channels':in_channels,'out_channels':out_channels})(identity)

residual = keras.layers.add([residual, identity])

return residual


# define and train a model
inputs = Input(shape=input_shape)
net = Conv2D(8, 3, padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(inputs)
net = residual_shrinkage_block(net, 1, 8, downsample=True)
net = BatchNormalization()(net)
net = Activation('relu')(net)
net = GlobalAveragePooling2D()(net)
outputs = Dense(10, activation='softmax', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(net)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=100, epochs=5, verbose=1, validation_data=(x_test, y_test))

# get results
K.set_learning_phase(0)
DRSN_train_score = model.evaluate(x_train, y_train, batch_size=100, verbose=0)
print('Train loss:', DRSN_train_score[0])
print('Train accuracy:', DRSN_train_score[1])
DRSN_test_score = model.evaluate(x_test, y_test, batch_size=100, verbose=0)
print('Test loss:', DRSN_test_score[0])
print('Test accuracy:', DRSN_test_score[1])

TFLearn程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 23 21:23:09 2019
Implemented using TensorFlow 1.0 and TFLearn 0.3.2

M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep Residual Shrinkage Networks for Fault Diagnosis,
IEEE Transactions on Industrial Informatics, 2019, DOI: 10.1109/TII.2019.2943898

@author: super_9527
"""

from __future__ import division, print_function, absolute_import

import tflearn
import numpy as np
import tensorflow as tf
from tflearn.layers.conv import conv_2d

# Data loading
from tflearn.datasets import cifar10
(X, Y), (testX, testY) = cifar10.load_data()

# Add noise
X = X + np.random.random((50000, 32, 32, 3))*0.1
testX = testX + np.random.random((10000, 32, 32, 3))*0.1

# Transform labels to one-hot format
Y = tflearn.data_utils.to_categorical(Y,10)
testY = tflearn.data_utils.to_categorical(testY,10)

def residual_shrinkage_block(incoming, nb_blocks, out_channels, downsample=False,
downsample_strides=2, activation='relu', batch_norm=True,
bias=True, weights_init='variance_scaling',
bias_init='zeros', regularizer='L2', weight_decay=0.0001,
trainable=True, restore=True, reuse=False, scope=None,
name="ResidualBlock"):

# residual shrinkage blocks with channel-wise thresholds

residual = incoming
in_channels = incoming.get_shape().as_list()[-1]

# Variable Scope fix for older TF
try:
vscope = tf.variable_scope(scope, default_name=name, values=[incoming],
reuse=reuse)
except Exception:
vscope = tf.variable_op_scope([incoming], scope, name, reuse=reuse)

with vscope as scope:
name = scope.name #TODO

for i in range(nb_blocks):

identity = residual

if not downsample:
downsample_strides = 1

if batch_norm:
residual = tflearn.batch_normalization(residual)
residual = tflearn.activation(residual, activation)
residual = conv_2d(residual, out_channels, 3,
downsample_strides, 'same', 'linear',
bias, weights_init, bias_init,
regularizer, weight_decay, trainable,
restore)

if batch_norm:
residual = tflearn.batch_normalization(residual)
residual = tflearn.activation(residual, activation)
residual = conv_2d(residual, out_channels, 3, 1, 'same',
'linear', bias, weights_init,
bias_init, regularizer, weight_decay,
trainable, restore)

# get thresholds and apply thresholding
abs_mean = tf.reduce_mean(tf.reduce_mean(tf.abs(residual),axis=2,keep_dims=True),axis=1,keep_dims=True)
scales = tflearn.fully_connected(abs_mean, out_channels//4, activation='linear',regularizer='L2',weight_decay=0.0001,weights_init='variance_scaling')
scales = tflearn.batch_normalization(scales)
scales = tflearn.activation(scales, 'relu')
scales = tflearn.fully_connected(scales, out_channels, activation='linear',regularizer='L2',weight_decay=0.0001,weights_init='variance_scaling')
scales = tf.expand_dims(tf.expand_dims(scales,axis=1),axis=1)
thres = tf.multiply(abs_mean,tflearn.activations.sigmoid(scales))
# soft thresholding
residual = tf.multiply(tf.sign(residual), tf.maximum(tf.abs(residual)-thres,0))


# Downsampling
if downsample_strides > 1:
identity = tflearn.avg_pool_2d(identity, 1,
downsample_strides)

# Projection to new dimension
if in_channels != out_channels:
if (out_channels - in_channels) % 2 == 0:
ch = (out_channels - in_channels)//2
identity = tf.pad(identity,
[[0, 0], [0, 0], [0, 0], [ch, ch]])
else:
ch = (out_channels - in_channels)//2
identity = tf.pad(identity,
[[0, 0], [0, 0], [0, 0], [ch, ch+1]])
in_channels = out_channels

residual = residual + identity

return residual


# Real-time data preprocessing
img_prep = tflearn.ImagePreprocessing()
img_prep.add_featurewise_zero_center(per_channel=True)

# Real-time data augmentation
img_aug = tflearn.ImageAugmentation()
img_aug.add_random_flip_leftright()
img_aug.add_random_crop([32, 32], padding=4)

# Build a Deep Residual Shrinkage Network with 3 blocks
net = tflearn.input_data(shape=[None, 32, 32, 3],
data_preprocessing=img_prep,
data_augmentation=img_aug)
net = tflearn.conv_2d(net, 16, 3, regularizer='L2', weight_decay=0.0001)
net = residual_shrinkage_block(net, 1, 16)
net = residual_shrinkage_block(net, 1, 32, downsample=True)
net = residual_shrinkage_block(net, 1, 32, downsample=True)
net = tflearn.batch_normalization(net)
net = tflearn.activation(net, 'relu')
net = tflearn.global_avg_pool(net)
# Regression
net = tflearn.fully_connected(net, 10, activation='softmax')
mom = tflearn.Momentum(0.1, lr_decay=0.1, decay_step=20000, staircase=True)
net = tflearn.regression(net, optimizer=mom, loss='categorical_crossentropy')
# Training
model = tflearn.DNN(net, checkpoint_path='model_cifar10',
max_checkpoints=10, tensorboard_verbose=0,
clip_gradients=0.)

model.fit(X, Y, n_epoch=100, snapshot_epoch=False, snapshot_step=500,
show_metric=True, batch_size=100, shuffle=True, run_id='model_cifar10')

training_acc = model.evaluate(X, Y)[0]
validation_acc = model.evaluate(testX, testY)[0]

論文網址

M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep residual shrinkage networks for fault diagnosis, IEEE Transactions on Industrial Informatics, vol. 16, no. 7, pp. 4681-4690, 2020.

https://ieeexplore.ieee.org/document/8850096

更多參考連結:

https://baike.baidu.com/item/%E6%B7%B1%E5%BA%A6%E6%AE%8B%E5%B7%AE%E6%94%B6%E7%BC%A9%E7%BD%91%E7%BB%9C


相關焦點

  • 何凱明的深度殘差網絡PPT是這樣的|ICML2016 tutorial
    殘差網絡(ResNets)將如何解決這些問題?殘差網絡在模型表徵方面不存在直接的優勢(只是實現重複參數化)但是,殘差網絡允許逐層深入地表徵所有的模型殘差網絡使得前饋式/反向傳播算法非常順利進行在極大程度上,殘差網絡使得優化較深層模型更為簡單殘差網絡未直接處理學習深度模型過程中存在的歸納問題但是,更深+更薄是一種好的歸納手段另外,對於殘差網絡的詳細介紹可見何凱明博士在
  • 獲獎無數的深度殘差學習,清華學霸的又一次No.1 | CVPR2016 最佳...
    我們提出了一種減輕網絡訓練負擔的殘差學習框架,這種網絡比以前使用過的網絡本質上層次更深。我們明確地將這層作為輸入層相關的學習殘差函數,而不是學習未知的函數。同時,我們提供了全面實驗數據,這些數據證明殘差網絡更容易優化,並且可以從深度增加中大大提高精度。我們在ImageNet數據集用152 層--比VGG網絡深8倍的深度來評估殘差網絡,但它仍具有較低的複雜度。
  • 變頻器電流傳感器故障診斷及修複方法
    電流傳感器在運行的過程中,會受到電流衝擊等因素的幹擾從而發生故障,導致系統崩潰。對於它的故障診斷方法主要有以下幾種。   (1)基於模型診斷方法。這種診斷方法的基礎是數學建模,也就是說數學模型在電動機上的應用。其中,必須要用到觀測器。觀測器所觀測的信息與實際對電流傳感器的測量信息做一個數據對比,從而判斷故障。利用全階自適應觀測器來產生一個殘差,根據殘差和給定的閾值判斷電流傳感器故障。
  • 靈魂拷問:殘差網絡解決了什麼,為什麼有效?
    深度傳送門引言殘差網絡是深度學習中的一個重要概念。1.2 網絡退化問題在前面的討論中,梯度彌散/爆炸問題導致模型訓練難以收斂,但是這個問題很大程度上已經被標準初始化和中間層正規化方法有效控制了,這些方法使得深度神經網絡可以收斂。
  • 深入探討:殘差網絡解決了什麼,為什麼有效?
    引言殘差網絡是深度學習中的一個重要概念。這篇文章將簡單介紹殘差網絡的思想,並結合文獻討論殘差網絡有效性的一些可能解釋。以下是本文的概覽:1.>這個問題很大程度上已經被標準初始化和中間層正規化方法有效控制了,這些方法使得深度神經網絡可以收斂。
  • 臺灣大學黃意堯:深度殘差網絡下的弱監督關係抽取 | EMNLP 2017
    問題探討我們使用卷積神經網絡來進行關係抽取,取經於計算機視覺與深度卷積神經網絡的成功,我們透過增加層數,來增加神經網絡的參數,希望可以幫助關係抽取的學習。我們猜測原因是,在 distant supervision 的數據裡面,有太多錯誤標籤的數據,這些數據帶來太多的噪聲,而這些噪聲隨著越深層的神經網絡而被放大,導致 9 層卷積神經網絡 (CNN-9) 的結果比單層 (CNN) 更差。為了解決這個問題,我們使用殘差網絡,來幫助網絡的特徵學習。
  • 學術簡報︳蒸汽冷卻型燃料電池系統在線故障診斷的新方法
    西南交通大學電氣工程學院的研究人員劉嘉蔚、李奇、陳維榮、餘嘉熹、燕雨,在2019年第18期《電工技術學報》上撰文(論文標題為「基於在線序列超限學習機和主成分分析的蒸汽冷卻型燃料電池系統快速故障診斷方法」),為解決蒸汽冷卻型燃料電池系統的故障診斷問題,該文提出基於在線序列超限學習機和主成分分析的蒸汽冷卻型燃料電池系統快速故障診斷新方法。
  • 反應堆故障診斷方法研究獲新進展
    近日, 中國科學院合肥物質科學研究院核能安全技術研究所在反應堆故障診斷方法研究領域取得進展,以Small-batch-size convolutional neural network based fault diagnosis system for nuclear energy production safety with big-data environment為題發表於能源領域國際期刊
  • 一文探討可解釋深度學習技術在醫療圖像診斷中的應用
    公平、可信地使用人工智慧,是在現實世界中部署人工智慧方法或模型的關鍵因素。本文重點關注可解釋深度學習方法在醫療圖像診斷中的應用。由於醫學圖像自有的特點,構建用於醫療圖像分析的可解釋深度學習模型與其它領域中的應用是不同的。本文依託於綜述性文章[1],首先回顧了可解釋性方法的主要分類以及可解釋深度學習在醫療圖像診斷領域中應用的主要方法。
  • 深度學習在醫學影像中的研究進展及發展趨勢
    隨後,Chen H等人提出RED-CNN降噪模型,將殘差網絡與卷積自動編碼器相結合,通過跳躍連接形成深度網絡,實現低劑量CT圖像的降噪。同年,Kang E等人首先對低劑量CT圖像進行方向小波變換,然後將深度卷積神經網絡模型應用於小波係數圖像,實現降噪,並使用殘差學習架構加快網絡訓練速度,提高性能。
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。與之前的深度學習網絡結構相比,它是如何讓錯誤率明顯降低的呢?
  • 深度學習之卷積神經網絡經典模型
    隨著ReLU與dropout的提出,以及GPU帶來算力突破和網際網路時代大數據的爆發,卷積神經網絡帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。將卷積層的深度提升到了19層,並且在當年的ImageNet大賽中的定位問題中獲得了第一名的好成績。整個網絡向人們證明了我們是可以用很小的卷積核取得很好地效果,前提是我們要把網絡的層數加深,這也論證了我們要想提高整個神經網絡的模型效果,一個較為有效的方法便是將它的深度加深,雖然計算量會大大提高,但是整個複雜度也上升了,更能解決複雜的問題。
  • 四大深度學習框架+四類GPU+七種神經網絡:交叉性能評測
    選自add-for作者:Pedro Gusmo機器之心編譯參與:李澤南、黃小天最近,Pedro Gusmo 等人對於英偉達的四種 GPU 在四種不同深度學習框架下的性能進行了評測。本次評測共使用了 7 種用於圖像識別的深度學習模型。第一個評測對比不同 GPU 在不同神經網絡和深度學習框架下的表現。
  • 高壓斷路器機械故障診斷與定位的新思路:KPCA-SoftMax診斷方法
    支持向量機(Support Vector Machine, SVM)、反向神經網絡(Back Propagation Neural Network, BPNN)、決策樹(Decision Tree, DT)、樸素貝葉斯(Naive Bayes, NB)等經典分類方法在斷路器故障診斷模型的建立中得到了廣泛的應用,有學者介紹了支持向量機的基本原理,提出了基於小波包和熵理論的振動信號特徵提取方法
  • 基於優化神經網絡的三相全控整流電路故障診斷
    本文應用一種自適應遞階遺傳算法同時優化神經網絡結構和連接權重進行三相橋式全控整流電路故障診斷。利用自適應遞階遺傳算法同時優化神經網絡結構和連接權重,很好地解決了以往利用神經網絡進行故障診斷的不足,並用三相橋式全控整流電路故障診斷仿真實例證明了該方法的正確性和有效性。
  • 光學精密工程 | 實例特徵深度鏈式學習全景分割網絡
    該網絡由基本的鏈式單元組合而成,根據單元結構對特徵信息處理方法的不同,鏈式單元分為特徵保持鏈和特徵增強鏈兩種。特徵保持鏈是鏈式網絡特徵提取過程的輸入級,保證輸入信息的完整性,而後將特徵傳遞到特徵增強鏈結構;特徵增強鏈通過自身的拓展來加深網絡深度,提升特徵提取能力。鏈式學習網絡由於具有良好的深度堆疊特性,可以獲取豐富的邊緣特徵信息,提高分割精度。
  • 水力發電機組的振動故障診斷技術
    2)神經網絡診斷法利用神經網絡進行故障診斷的基本思想是:以故障特徵信號作為神經網絡輸入,診斷結果作為神經網絡輸出。首先利用已有的故障徵兆和診斷結果對神經網絡進行離線訓練,使神經網絡通過權值記憶故障徵兆與診斷結果之間存在的對應關係;然後將得到的故障徵兆加到神經網絡的輸入端,就可以利用訓練後的神經網絡進行故障診斷,並得到相應的診斷結果。目前,神經網絡診斷法已越來越廣泛的應用到水電機組振動故障診斷系統中來。
  • 前沿研究丨深度學習在醫學超聲圖像分析中的應用
    在超聲圖像輸入到深度神經網絡之前,通常會先進行預處理和數據增強(如提取ROI、圖像裁剪等)。儘管監督深度學習中也可以使用後處理,但是通常很少這麼做,反而會將特徵圖譜直接輸入到softmax分類器進行分類另一種常見的腫瘤是肝癌,已成為全世界第六大癌症和第三大癌症死亡原因。早期精準診斷對於通過提供最佳幹預來提高生存率非常重要。活檢仍然是當前肝癌診斷的金標準,並且嚴重依賴傳統CADx方法。
  • 複雜場景下的複雜缺陷檢測方法——深度學習算法綜述
    二、傳統算法傳統的表面缺陷檢測算法結構通過圖像預處理得到便於檢測的圖像,隨後藉助統計機器學習方法來提取圖像特徵,進而實現缺陷檢測的目標。例如:圖像預處理步驟繁多且具有強烈的針對性,魯棒性差;多種算法計算量驚人且無法精確的檢測缺陷的大小和形狀。而深度學習可以直接通過學習數據更新參數,避免了人工設計複雜的算法流程,並且有著極高的魯棒性和精度。
  • 入門| 獻給新手的深度學習綜述
    引言 「深度學習」(DL)一詞最初在 1986 被引入機器學習(ML),後來在 2000 年時被用於人工神經網絡(ANN)。深度學習方法由多個層組成,以學習具有多個抽象層次的數據特徵。DL 方法允許計算機通過相對簡單的概念來學習複雜的概念。