2019-07-16 20:40:52 wangwei19871103 阅读数 78
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14360 人正在学习 去看看 唐宇迪

keras实战-入门之一维卷积

一维卷积

最近接触到一维卷积,最开始的时候觉得应该很简单,然后网上看了几个例子,参数很奇怪,特别是模型的维度搞不明白,不知道怎么来的,看API也不太明白,可能我太笨了,所以自己琢磨了半天,才稍微弄了点明白,今天不怎么讲代码,就讲点原理吧。

二维卷积比较常见,基本上一个图片的样本的维度是(高,宽,通道),而一维是(高,宽),而对于句子来说,比如I am Jack,三个单词,但是单词一般会变成词向量,比如简单点3维的,我就三个词,就3维,那这样,这个一维的样本就是(3,3),高就是有几个单词,宽就是每个单词的维度。同理,如果是原始语音信号,是采样得到的,比如采样3秒,每秒16000的采样率,这样就得到48000个采样点,每个点对应一个幅度值,这里的高就是48000,宽就是幅度值,因为就是个值,是一维向量,所以样本就是(48000,1).这个应该好理解吧。

网上找了个图,最简单的,样本是(3,4,1,5,6),卷积核(-2,2,1),步长是1,直观看下吧:
在这里插入图片描述

卷积的过程我拿个简单的例子来说下:
输入是(64,1),经过两次卷积核最大池化后变成了(1, 16),看上去好神奇,有点反直觉啊,具体来看看吧。

inp = Input(shape=(64,1))
x = Conv1D(32, (9), activation='relu')(inp)
x = MaxPool1D((4))(x)
x = Conv1D(16, (9), activation='relu')(x)
x = MaxPool1D((4))(x)
model = Model(inp, x)

结构如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_6 (InputLayer)         (None, 64, 1)             0         
_________________________________________________________________
conv1d_22 (Conv1D)           (None, 56, 32)            320       
_________________________________________________________________
max_pooling1d_14 (MaxPooling (None, 14, 32)            0         
_________________________________________________________________
conv1d_23 (Conv1D)           (None, 6, 16)             4624      
_________________________________________________________________
max_pooling1d_15 (MaxPooling (None, 1, 16)             0         
=================================================================
Total params: 4,944
Trainable params: 4,944
Non-trainable params: 0
_________________________________________________________________

我来解释下维度的变化:

首先输入层(None, 64, 1) 表示样本数未定,但是每个样本是(64,1)是我们设定的。

经过conv1d_22 (Conv1D) 层得到(None, 56, 32),32是因为我们用了32个过滤器提取特征.。
56是因为卷积长度是9,默认步子是1,也就是每次拿长度为9的格子,走一格走遍64个,做向量点乘,得到一个值,直到走到最后一个能包含整个滤波器为止,剩下多出来的不要了。比如最开始是0-8和滤波器做点积,然后1-9,2-10,3-11一直到55-63,剩下的56-63小于9所以不要了。因此总共是55-0+1=56个,所以维度是(None, 56, 32) ,下面的也同理。

至于最大池化MaxPool1D就是等于除法,取整,比如 MaxPool1D((4))就是把刚才剩下的56/4刚好是14,但是最后的池化是6/4,取整是1,刚还最后剩下 (None, 1, 16)。如果不明白的话可以自己动手画画,我也是这么弄明白的,其实跟二维卷一样,就是好像看起来不是那么明显。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自网络,侵删。

2019-07-12 17:46:00 weixin_30236595 阅读数 318
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14360 人正在学习 去看看 唐宇迪

目录

  一维Full卷积

  一维Same卷积

  一维Valid卷积

  三种卷积类型的关系

  具备深度的一维卷积

  具备深度的张量与多个卷积核的卷积

  参考资料


一维卷积通常有三种类型:full卷积、same卷积和valid卷积,下面以一个长度为5的一维张量I和长度为3的一维张量K(卷积核)为例,介绍这三种卷积的计算过程

 

 

一维Full卷积

Full卷积的计算过程是:K沿着I顺序移动,每移动到一个固定位置,对应位置的值相乘再求和,计算过程如下:

将得到的值依次存入一维张量Cfull,该张量就是I和卷积核K的full卷积结果,其中K卷积核或者滤波器或者卷积掩码,卷积符号用符号★表示,记Cfull=I★K

 返回目录

 

一维Same卷积

 

卷积核K都有一个锚点,然后将锚点顺序移动到张量I的每一个位置处,对应位置相乘再求和,计算过程如下:

 

假设卷积核的长度为FL,如果FL为奇数,锚点位置在(FL-1)/2处;如果FL为偶数,锚点位置在(FL-2)/2处。

 返回目录

 

一维Valid卷积

 从full卷积的计算过程可知,如果K靠近I,就会有部分延伸到I之外,valid卷积只考虑I能完全覆盖K的情况,即K在I的内部移动的情况,计算过程如下:

 

 

 返回目录

 

三种卷积类型的关系

 

 返回目录

 

具备深度的一维卷积

比如x是一个长度为3,深度为3的张量,其same卷积过程如下,卷积核K的锚点在张量x范围内依次移动,输入张量的深度和卷积核的深度是相等的。

 返回目录

 

具备深度的张量与多个卷积核的卷积

上面介绍了一个张量和一个卷积核进行卷积。他们的深度相等才能进行卷积,下面介绍一个张量与多个卷积核的卷积。同一个张量与多个卷积核的卷积本质上是该张量分别与每一个卷积核卷积,然后将每一个卷积结果在深度方向上连接起来。

 

举例:以长度为3、深度为3的输入张量与2个长度为2、深度为3的卷积核卷积为例,过程如下:

 返回目录

 

参考资料

 《图解深度学习与神经网络:从张量到TensorFlow实现》_张平

 返回目录

转载于:https://www.cnblogs.com/itmorn/p/11177439.html

2019-04-18 21:55:02 qq_42826337 阅读数 1280
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14360 人正在学习 去看看 唐宇迪

Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积,从图像像素中提取图像特征,这种处理方式更加接近人类大脑视觉系统的处理方式。另外,卷积神经网络的权值共享属性和pooling层使网络需要训练的参数大大减小,简化了网络模型,提高了训练的效率。

一、搭建卷积网络步骤

1、建立模型

1.1、建立Sequential模型

Sequential模型是多个神经网络的线性堆叠。类似于一个框架结构,之后将设计好的层及层的参数填到到这个模型中,实现一个整体网络的效果。

from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPooling2D
"""
	建立Sequential模型
"""
from keras.models import Sequential #在使用前需要先提前导入这个函数
model = Sequential()
1.2、建立卷积层

卷积神经网络的卷积层,也叫做特征提取层,包括二个部分。第一部分是真正的卷积层,主要作用是提取输入数据特征。每一个不同的卷积核提取输入数据的特征都不相同,卷积层的卷积核数量越多,就能提取越多输入数据的特征。

"""
    建立卷积层1
    
    参数:
        filters - 建立的滤镜个数
        kernel_size - 滤镜大小
        padding - 填充:当为'same'时,使得图像卷积后的大小保持不变
        input_shape - 输入图形大小
        activation - 设置激活函数
"""
model.add(Conv2D(filters=16,
                 kernel_size=(5,5),
                 padding = 'same',
                 input_shape = (28,28,1),
                 activation = 'relu'))

1.3、建立池化层

pooling层,也叫下采样层,主要目的是在保留有用信息的基础上减少数据处理量,加快训练网络的速度。通常情况下,卷积神经网络至少包含二层卷积层(这里把真正的卷积层和下采样层统称为卷积层),即卷积层,pooling层,卷积层,pooling层。卷积层数越多,在前一层卷积层基础上能够提取更加抽象的特征。

"""
    建立池化层1
    
    参数:
        pool_size - 池化层大小
        
"""
model.add(MaxPooling2D(pool_size = (2,2)))

在这之后也可以继续添加卷积层2 -> 池化层2 ……依据你的神经网络需求而定,这里不再做过多赘述。

1.4、建立平坦层

由于通过了过滤器,使得数据维度发生改变,而这一步的作用是在输入到神经网络之前,将待处理的数据转换为一维向量,对应到输入层的神经单元上。

#建立平坦层
model.add(Flatten())
1.5、建立隐蔽层和输出层

这一步同建立多层神经网络方法相同,这里不再做过多的解释。
如何搭建单层或多层神经网络请见上一篇博客。

https://blog.csdn.net/qq_42826337/article/details/89341800

#建立隐蔽层
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))

#建立输出层
model.add(Dense(10,activation='softmax'))

可以包含多个全连接层,实际上就是多层感知机的隐含层部分。通常情况下后面层的神经节点都和前一层的每一个神经节点连接,同一层的神经元节点之间是没有连接的。每一层的神经元节点分别通过连接线上的权值进行前向传播,加权组合得到下一层神经元节点的输入。

1.6、查看模型摘要
print(model.summary())

在这里插入图片描述

2、开始训练

2.1、定义训练方式
"""
    定义训练方式

    参数:
        loss - 损失函数: 这里采用交叉熵的方式
        optimizer - 优化器: 使用adam优化器可以让训练收敛更快
        metrics - 评估模型:设置为准确率

"""
model.compile(loss='categorical_crossentropy',
              optimizer='adam',metrics=['accuracy'])
2.2、开始训练
"""
    开始训练

    参数:
        x_train4D_normalize - feature数字图像的特征值
        y_trainOneHot - 数字图像的真实标签
        validation_spli - 训练与验证数据比例:80%用作训练数据,20%用作验证数据
        epochs - 训练周期
        batch_size - 每批次的数据项数
        verbose - 显示训练过程
"""
train_history=model.fit(x=x_train4D_normalize,
                        y=y_trainOneHot,validation_split=0.2,
                        epochs=10,batch_size=300,verbose=2)

在这里插入图片描述

2.3、画出准确的执行过程
import matplotlib.pyplot as plt
def show_train_history(train_history,train,validation):
    """
    显示训练过程

    参数:
        train_history - 训练结果存储的参数位置
        train - 训练数据的执行结果
        validation - 验证数据的执行结果
        
"""
    plt.plot(train_history.history[train])
    plt.plot(train_history.history[validation])
    plt.title('Train History')
    plt.ylabel(train)
    plt.xlabel('Epoch')
    plt.legend(['train','validation'],loc = 'upper left')
    plt.show()
show_train_history(train_history,'acc','val_acc') #绘制准确率执行曲线
show_train_history(train_history,'loss','val_loss') #绘制损失函数执行曲线

在这里插入图片描述
由于这里的训练集准确率始终大于验证集准确率,所以我们需要通过增加训练周期或是增加隐蔽层数从而提高准确率,使其在不发生过拟合的前提下实现准确率曲线尽可能的接近。同时我们可以发现卷积网络使得代价函数的值降得非常低,这说明卷积可以增加训练的准确性,训练出更接近准确值的参数。

3、评估模型准确率

根据训练来分析此模型的准确率。

scores = model.evaluate(x_test4D_normalize,y_testOneHot)
scores[1]

4、显示混淆矩阵

混淆矩阵也称误差矩阵,是一种特定的表格显示方式,可以让我们以可视化的方式了解有监督的学习算法的结果,看出算法模型是否混淆了两个类。

import pandas as pd
pd.crosstab(y_test,prediction,
            rownames=['label'],colnames=['predict'])

在这里插入图片描述
对角线为预测正确的数字,其他非对角线的数字代表将某一个标签预测错误,成为另一个标签。

二、对二维数据进行一维卷积

通常情况下我们会遇到一些一维数据,例如经过FFT卷积后得到的信号,或者是一些音频信号等自然语言处理领域,要想卷积这种数据,我们就会用到一维卷积的方法。
在这里插入图片描述
如图所示,左侧为我们需要卷积的信号,右侧是过滤器,卷积的方法与二维卷积相似,也是通过相乘 -> 相加 ->平移 ……,从而在提取特征值后压缩原有数据,从而简化网络。

1、如何搭建一维卷积网络

上述是对1维数据进行1维卷积的方法,比较简单,这里重点说如何对2维及以上数据进行1维卷积。

1.1、导入1维卷积函数

首先我们要倒入1维卷积网络的各种函数包。

from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten,Conv1D,MaxPooling1D
1.2、降维(针对2维数据做1维卷积情况)

这里要说一点,我们在对数据预处理的时候,如果不是一维数据而是二维的话,一定要先将数据进行降维,例如我之前有个28*28的数据,我们要将其变为28 * 28=784。

为了表示清楚,这里做个对比。

(1)二维卷积(不需要对数据进行降维)

x_train4D = x_train.reshape(x_train.shape[0],28,28,1).astype('float32')
x_test4D = x_test.reshape(x_test.shape[0],28,28,1).astype('float32')
x_train4D_normalize = x_train4D / 255
x_test4D_normalize = x_test4D / 255

(2)一维卷积(需要对数据进行降维)

x_train3D = x_train.reshape(x_train.shape[0],784,1).astype('float32')
x_test3D = x_test.reshape(x_test.shape[0],784,1).astype('float32')
x_train3D_normalize = x_train3D / 255
x_test3D_normalize = x_test3D / 255

强调一点,(60000,28,28,1)最后的“1”是需要与过滤器进行卷积的通道维度数,也就是说,数据的最后一位是通道数,而不是数据的维数。你不可以将降维后的数据维度写成(60000,1,784),这样就变成了60000个数据,数据大小为1,通道数为784了;你必须写成(60000,784,1),表示60000个数据,大小为784,通道数为1。

1.3、建立模型

之后所有的卷积层和池化层都要调用1维卷积的函数,也就是将之前的Conv2D都变为Conv1D。

这里需要说一点,即使是1维卷积,我们依然需要平坦层,因为在卷积后,通道数也占了一个维度,而整体看来,数据还是一个多维数据,无法作为1维数据传入神经网络的输入层,我这里想了很久,如图:
在这里插入图片描述
这是一维卷积网络的模型摘要,我们的输入为784大小的一维数据,下一层的过滤器个数为10等等……
最后在平坦层上之前,也就是我圈出来的部分,是一个2维数据,所以需要通过平坦层将49*10变为一个490的一维数据,才能传入神经网络的输入层。

之后的所有模型建立方法都与2维建立相同。


下面附上对2维数据进行1维卷积的代码事例:

from keras.datasets import mnist
from keras.utils import np_utils
import numpy as np
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten,Conv1D,MaxPooling1D
np.random.seed(10)


(x_train,y_train),(x_test,y_test) = mnist.load_data()
#将features转换为三维矩阵
x_train3D = x_train.reshape(x_train.shape[0],784,1).astype('float32')
x_test3D = x_test.reshape(x_test.shape[0],784,1).astype('float32')
#将feature标准化
x_train3D_normalize = x_train3D / 255
x_test3D_normalize = x_test3D / 255
#将label进行one hot转换
y_trainOneHot = np_utils.to_categorical(y_train)
y_testOneHot = np_utils.to_categorical(y_test)


#建立一个Sequential线性堆叠模型
model = Sequential()
model.add(Conv1D(filters=16,
                 kernel_size=25,
                 padding = 'same',
                 input_shape = (784,1),
                 activation = 'relu'))
model.add(MaxPooling1D(pool_size = 4))
#建立卷积层2
model.add(Conv1D(filters=10,
                 kernel_size=25,
                 padding = 'same',
                 activation = 'relu'))
#建立池化层2
model.add(MaxPooling1D(pool_size = 4))
model.add(Dropout(0.25))
#建立平坦层
model.add(Flatten())
#建立隐蔽层
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))
print(model.summary())

model.compile(loss='categorical_crossentropy',
              optimizer='adam',metrics=['accuracy'])
train_history=model.fit(x=x_train3D_normalize,
                        y=y_trainOneHot,validation_split=0.2,
                        epochs=30,batch_size=300,verbose=2)
import matplotlib.pyplot as plt
def show_train_history(train_history,train,validation):
    """
    显示训练过程

    参数:
        train_history - 训练结果存储的参数位置
        train - 训练数据的执行结果
        validation - 验证数据的执行结果
        
"""
    plt.plot(train_history.history[train])
    plt.plot(train_history.history[validation])
    plt.title('Train History')
    plt.ylabel(train)
    plt.xlabel('Epoch')
    plt.legend(['train','validation'],loc = 'upper left')
    plt.show()
    
show_train_history(train_history,'acc','val_acc')
show_train_history(train_history,'loss','val_loss')
scores = model.evaluate(x_test3D_normalize,y_testOneHot)
scores[1]
2017-09-19 17:20:26 yangdashi888 阅读数 2145
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14360 人正在学习 去看看 唐宇迪

深度学习里神奇的1*1卷积核

这里主要介绍下1*1卷积核的神奇之处核最好的使用范围,在开始之前需要了解下卷积网络的权值共享概念,其中权值共享基本上有两种方法:

  • 在同一特征图和不同通道特征图都使用共享权值,这样的卷积参数是最少的,例如上一层为30*30*40,当使用3*3*120的卷积核进行卷积时,卷积参数为:3*3*120个.(卷积跟mlp有区别也有联系一个神经元是平面排列,一个是线性排列)
  • 第二种只在同一特征图上使用共享权值,根据上面的例子,则卷积参数为:3*3*40*120.

1*1卷积核主要作用:

  • 实现跨通道的交互和信息整合(具有线性修正特性,实现多个feature map的线性组合,可以实现feature map在通道个数上的变化,想象成跨通道的pooling,(输入的多通道的feature map和一组卷积核做卷积求和得到一个输出的feature map)
  • 在pooling层后面加入的1×1的卷积也是降维,使得最终得到更为紧凑的结构,虽然有22层,但是参数数量却只是alexnet的1/12.
  • 最近大热的MSRA的resnet也利用了1×1的卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,数量进一步减少。如果1×1卷积核接在普通的卷积层后面,配合激活函数,就可以实现network in network的结构了。
  • 还有一个很重要的功能,就是可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。(平均池化是针对每个feature map的平均操作,没有通道间的交互,而1×1卷积是对通道的操作,在通道的维度上进行线性组合)
    例子:
    进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
    这里写图片描述

最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
这里写图片描述

2019-05-08 21:57:50 xiao_bai_0_0 阅读数 300
  • 深度学习30天系统实训

    系列教程从深度学习核心模块神经网络开始讲起,将复杂的神经网络分模块攻克。由神经网络过度到深度学习,详解深度学习中核心网络卷积神经网络与递归神经网络。选择深度学习当下流行框架Tensorflow进行案例实战,选择经典的计算机视觉与自然语言处理经典案例以及绚丽的AI黑科技实战,从零开始带大家一步步掌握深度学习的原理以及实战技巧。课程具体内容包括:神经网络基础知识点、神经网络架构、tensorflow训练mnist数据集、卷积神经网络、CNN实战与验证码识别、自然语言处理word2vec、word2vec实战与对抗生成网络、LSTM情感分析与黑科技概述。

    14360 人正在学习 去看看 唐宇迪

关于一维卷积深度学习神经网络
本人初学深度学习,在这上边走了大概半年。有些许收获也有些许问题,鉴于目前网上关于一维卷积的资料比较少,而且研究这个的大佬也不多。(目前联系到的都是研究生之类的同志在自学)。所以特立此贴,希望拉个群大家能交流一下。
CNN
Keras
tensorflow
sklearn

等等
目前群里5个人了,搞啥的都有。希望大家互帮互助,多多沟通。
联系方式:qq952492719备注CSDN,否则不同意。
祝大家学业有成!也欢迎热心大佬前来指导“祖国的未来”0.0

2019.8.17更新
目前群里已有25人,不限于CNN,我本人开始转向RNN,有群友分享的大量资料。
发现基本都是高校研究的同学,来做深度学习和学科相结合的。比如信号处理、医学图像、遥感等等,涉及面非常广泛。在这里插入图片描述在这里插入图片描述
欢迎更多的同学同志前来交流。

没有更多推荐了,返回首页