首页 > 其他分享 >深度学习-卷积神经网络基础2-43

深度学习-卷积神经网络基础2-43

时间:2024-02-20 22:56:14浏览次数:34  
标签:plt show 卷积 imshow 43 channels np 神经网络 images

目录

1. 池化层

为什么要有池化层?
目标就是降采样subsample,shrink,减少计算负荷,内存使用,参数数量(也可防止过拟合)
正如卷积神经网络一样,在池化层中的每个神经元被连接到上面一层输出的神经元,只对应一小块感受野的区域。我们必须定义大小,步长,padding类型
池化神经元没有权重值,它只是聚合输入根据取最大或者是求均值
2*2的池化核,步长为2,没有填充,只有最大值往下传递,其他输入被丢弃掉了
长和宽两倍小,面积4倍小,丢掉75%的输入值
一般情况下,池化层工作于每一个独立的输入通道,所以输出的深度和输入的深度相同

在保留图片特征的前提下 压缩图片 降低数据量

2. CNN的一般架构

典型的CNN架构堆列一些卷积层
一般一个卷积层后跟ReLU层,然后是一个池化层,然后另一些个卷积层+ReLU层,然后另一个池化层,通过网络传递的图片越来越小,但是也越来越深,例如更多的特征图!
最后常规的前向反馈神经网络被添加,由一些全连接的层+ReLU层组成,最后是输出层预测,例如一个softmax层输出预测的类概率
一个常见的误区是使用卷积核过大,你可以使用和99的核同样效果的两个33的核,
好处是会有更少的参数需要被计算,还可以在中间多加一个非线性激活函数ReLU,来提供复杂程度

3. 经典的LeNet


4 代码

import numpy as np
from sklearn.datasets import load_sample_images
import tensorflow as tf
import matplotlib.pyplot as plt


# 加载数据集
# 输入图片通常是3D,[height, width, channels]
# mini-batch通常是4D,[mini-batch size, height, width, channels]
dataset = np.array(load_sample_images().images, dtype=np.float32)
# 数据集里面两张图片,一个中国庙宇,一个花
batch_size, height, width, channels = dataset.shape
print(batch_size, height, width, channels)

# plt.imshow(load_sample_images().images[0])  # 绘制第一个图
# plt.show()

# plt.imshow(load_sample_images().images[1])  # 绘制第二个图
# plt.show()

# 创建两个filters
# 高,宽,通道,卷积核
# 7, 7, channels, 2
filters_test = np.zeros(shape=(7, 7, channels, 2), dtype=np.float32)
filters_test[:, 3, :, 0] = 1  # 垂直
filters_test[3, :, :, 1] = 1  # 水平

# filter参数是一个filters的集合
X = tf.placeholder(tf.float32, shape=(None, height, width, channels))
# strides=[1, 2, 2, 1] 中第一最后一个为1,中间对应sh和sw
convolution = tf.nn.conv2d(X, filter=filters_test, strides=[1, 1, 1, 1], padding='SAME')

with tf.Session() as sess:
    output = sess.run(convolution, feed_dict={X: dataset})
    print(output.shape)


plt.imshow(load_sample_images().images[0])  # 绘制第一个图
plt.show()

plt.imshow(output[0, :, :, 0])  # 绘制第一个图的第一个特征图
plt.show()

plt.imshow(output[0, :, :, 1])  # 绘制第一个图的第二个特征图
plt.show()

plt.imshow(load_sample_images().images[1])  # 绘制第二个图
plt.show()

plt.imshow(output[1, :, :, 0])  # 绘制第二个图的第一个特征图
plt.show()

plt.imshow(output[1, :, :, 1])  # 绘制第二个图的第二个特征图
plt.show()

5 代码2

import numpy as np
from sklearn.datasets import load_sample_images
import tensorflow as tf
import matplotlib.pyplot as plt


# 加载数据集
# 输入图片通常是3D,[height, width, channels]
# mini-batch通常是4D,[mini-batch size, height, width, channels]
dataset = np.array(load_sample_images().images, dtype=np.float32)
# 数据集里面两张图片,一个中国庙宇,一个花
batch_size, height, width, channels = dataset.shape
print(batch_size, height, width, channels)

# 创建输入和一个池化层
X = tf.placeholder(tf.float32, shape=(None, height, width, channels))
# TensorFlow不支持池化多个实例,所以ksize的第一个batch size是1
# TensorFlow不支持池化同时发生的长宽高,所以必须有一个是1,这里channels就是depth维度为1
max_pool = tf.nn.max_pool(X, ksize=[1, 4, 4, 1], strides=[1, 4, 4, 1], padding='VALID')
# avg_pool()

with tf.Session() as sess:
    output = sess.run(max_pool, feed_dict={X: dataset})
    print(output.shape)

plt.imshow(dataset[0].astype(np.uint8))
plt.show()
plt.imshow(output[0].astype(np.uint8))  # 画输入的第一个图像
plt.show()

plt.imshow(dataset[1].astype(np.uint8))
plt.show()
plt.imshow(output[1].astype(np.uint8))  # 画输入的第二个图像
plt.show()

标签:plt,show,卷积,imshow,43,channels,np,神经网络,images
From: https://www.cnblogs.com/cavalier-chen/p/18024222

相关文章

  • P3435
    P3435设\(Q=a[1,i]\),左端绿色虚线终点为j则\(a[1,j]==a[i+1,n]\),因为他们位于Q的相同位置联想到kmp的next数组\(len_Q=n-next[j]\)只要找到最小的且非0的\(next[j]\)就可以最大化\(len_Q\)类似失配时的操作,递归找j对应的最小next......
  • 【深度学习】神经网络的建立与推理
    目录神经网络(neuralnetwork)的结构神经元中常用的激活函数(activationfunction)神经网络的表示神经网络的代码实现使用已学习完毕的神经网络进行推理(inference)源代码文件请点击此处!神经网络(neuralnetwork)的结构输入层(inputlayer):第0层(layer0)隐藏层(hiddenlayer):第1层(lay......
  • Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
    全文链接:https://tecdat.cn/?p=33566原文出处:拓端数据部落公众号生成对抗网络(GAN)是一种神经网络,可以生成类似于人类产生的材料,如图像、音乐、语音或文本。最近我们被客户要求撰写关于GAN生成对抗性神经网络的研究报告,包括一些图形和统计输出。近年来,GAN一直是研究的热门话题。F......
  • Porsche Piwis 3 Tester III V43.300.22 + V38.250 Diagnostic Tool Support Diagnosi
    Greatnews!ThePorschePiwis3TesterIIIV43.300.22+V38.250DiagnosticToolhasjustbeenupdatedwithnewsoftwareversions.ThislatestversioncoversalloldandnewPorschecarsupto2024,makingitacomprehensivediagnostictoolforprofessiona......
  • 用python脚本自动发送钉钉消息出现服务器异常的报错: HTTPSConnectionPool(host='oapi.
    一、问题描述执行python脚本发送钉钉消息,出现报错:HTTPSConnectionPool(host='oapi.dingtalk.com',port=443):Maxretriesexceededwithurl:/robot/send?access_token=43df999582e899dc6815c9d6346c9d253060259625c92e4f166e25ea58e5bdb5&timestamp=1708242748918&sign......
  • 洛谷题单指南-递推与递归-P2437 蜜蜂路线
    原题链接:https://www.luogu.com.cn/problem/P2437题意解读:根据题目要求,只能从标号小的蜂房爬到标号大的相邻蜂房,即每次要么爬到+1的蜂房,要么爬到+2的蜂房,本质上是一个斐波那契数列问题,和数楼梯问题一样。解题思路:要求从m号蜂房到n号蜂房的路径,即走n-m级楼梯的方案,n最大1000,同样......
  • P8431
    #include<cstring>#include<cstdio>usingnamespacestd;chars[50];intlen;signedmain(){ intT; scanf("%d",&T); while(T--) { scanf("%s",s); len=strlen(s); boolflag=0,flag2=1;//flag用来标记有没有不是9的;......
  • P1439 【模板】最长公共子序列
    首先找最大公共子序列,可以轻松想到$O(n^2)$的dp转移式子,$f_{i,j}=max\begin{cases}f_{i-1,j}&i>0\f_{i,j-1}&j>0\f_{i-1,j-1}+1&i>0,j>0,A_i=A_j\end{cases}$但是我们发现最后$n\le10^5$所以$n^2$的复杂度不够优,这个时候再看题目,发现A,B都是 1~n的排列,由此可知A,B......
  • hdu4336
    这道题目是很明显的无穷嵌套DP,准备写出一堆方程后化简,又看到数据范围想到了状态压缩设\(f[i]\)表示手上已经有了\(i\)的卡片,集齐所有卡片的期望这个时候我们不要去捣鼓一般性,而是选择直接手搓一个小范围数据,因为我们知道,一定是有规律的不妨令\(n=3\),于是有(以下的状态都是二进制......
  • 力扣递归之 543. 二叉树的直径
    classSolution{//二叉树直径其实就是根到左子树最深+根到右子树最深  intdiameter;    publicintdiameterOfBinaryTree(TreeNoderoot){    calculateDepth(root);    returndiameter;  }    privateintcalculateDe......