神经网络中的分类器该如何改成生成器?

640?wx_fmt=gif

640?wx_fmt=jpeg

 

作者 | 李秋键
责编 | 刘静
出品 | 优快云(ID:优快云news)

引言:  相信我们都做过一些图片分类或者是其他分类的项目,我们知道神经网络是在w和b参数调节基础上,使得x与y达到对应输出的效果。比如最经典的Mnist手写字体识别,给一张图片模型判断后将会输出数字结果,比如这样:

 

640?wx_fmt=png

我们知道大多数生成网络是用的GAN算法,显然他有他自己的优势,

通过对目的的改进,可以变更机率分解建模的变量,使随机变量与具体数据分布尽量相似。在现代的分解建模中的,一般使用统计数据的似然作为改进目的,而GAN创新地用于了另一个改进目的。

首先,引进判断建模(常见建模还包括反对矢量机和多层人工神经网络)。

其次,其改进步骤是在分解建模和判断建模两者之间寻找沃克平衡。

GAN创建的自学构建实质上是分解建模和判断建模两者之间的仿真博弈论。

分解建模的目标是尽量多地仿真、仿真和自学现实统计数据的产于规律性。

判断建模是辨别一个输出统计数据是来自现实的数据分布还是分解的建模。

通过这两个外部建模两者之间的停滞市场竞争,提升了分解和区别这两个建模的战斗能力。如果分解的建模统计数据依然不存在误解,无法准确辨别,那么我们指出分解的建模实质上早已理解了现实统计数据的状况。

与其它算法比起,GAN能制造出有更加明晰、现实的样本

下面我们将对我们的项目进行演示讲解

通过程序调试可以知道,它的输入端是x,为多行784列的矩阵,而输出端是多行10列的矩阵为onehot编码形式,即[0,0,0,1,0,0,0,0,0,0]这种形式。

那么我们不妨设想,如果把x换成[0,0,0,1,0,0,0,0,0,0]形式,而输出端换成多行784列的矩阵又将如何呢,下面我们将对其进行修改演示。

首先导入相关的库:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
#构建TensorFlow模型
import tensorflow as tf
import sys
import numpy as np
from matplotlib import pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
读入数据:
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

print(mnist)
下面是定义变量和占位符,注意看我的修改:
x = tf.placeholder("float", [None, 10])#占位符
W = tf.Variable(tf.zeros([10,784]))#赋值变量,生成784*10的矩阵,内容全为零
b = tf.Variable(tf.zeros([784]))#同上理

y = tf.nn.softmax(tf.matmul(x,W) + b)#将x*W+b公式计算的结果借助softmax激活函数分类

y_ = tf.placeholder("float", [None,784])#占位符,生成10列的矩阵,行数自适应
很显然在上面我们把x输入改成了[0,0,0,1,0,0,0,0,0,0]形式,而y则是多行784列的矩阵,为了满足矩阵相乘的条件,把w和b也对应互换。

下面我们就用最简单的算法进行实现,因为我们只是在试探生成器的原理,至于是用神经网络算法还是卷积等等最后按照自己需求修改即可。

分别定义短时函数,优化器梯度下降,以及会话训练的准备。

cross_entropy = -tf.reduce_sum(y_*tf.log(y))#定义损失函数为y*logy的算术平均值

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)#梯度下降法减少损失函数的值,优化模型

init = tf.initialize_all_variables()#模型初始化。即所有参数初始为0
sess = tf.Session()#模型初始化会话
sess.run(init)#准备训练
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))#定义预测准确数,通过对比y真实值和y_预测值的相等的数量
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))#定义准确率为准确率的均方差
然后训练1000次:
for i in range(1000):#训练1000次
  if i % 20 == 0:#每20次向控制台输出结果
    sys.stdout.write('.')

  batch_xs, batch_ys = mnist.train.next_batch(100)#训练批次为100次
  sess.run(train_step, feed_dict={y_: batch_xs, x: batch_ys})#建立训练
  ttt=str(sess.run(accuracy, feed_dict={y_: batch_xs, x: batch_ys}))
  print("训练第"+str(i)+"次的准确率为"+ttt)
输出下最终得到的结果,看生成的图片效果怎么样:
print (sess.run(accuracy, feed_dict={y_: mnist.test.images, x: mnist.test.labels}))#测试输出预测结果

'''显示图片预测'''
x=np.array([[0,1,0,0,0,0,0,0,0,0]])
x=tf.cast(x,tf.float32)
plt.figure()
y=tf.nn.softmax(tf.matmul(x,W) + b)
y=y.eval(session=sess)
print(y)
y=np.reshape(y,[28,28])
plt.imshow(y)
plt.show()
仅仅是5秒的时间,我们便训练了1000次生成了图片,因为是最简单的线性训练,测试的是生成数字1的图片

效果如下图所示:

640?wx_fmt=png

很显然我们5秒生成的图片效果还不错,还是挺接近1的。如果你想要更多的效果可以修改生成其他图片。我们这个项目最简单的讲解了生成器和判别器的互换,让更多的人不必研究那些深奥的算法即可实现生成图片。那么下面我们将生成器做更深的了解。

市面上大多数生成图片是用的GAN算法,即生成对抗神经网络,很显然我们用了如此简单的算法也可以实现生成图片的效果。但是不可忽略的是GAN的效果会更好些,但是难度较大。那么我们将对其中的GAN做个简单的介绍。

GAN主要的启发可能是零和的游戏在概率论观念,运用于浅自学人工神经网络,是通过生成器和判断器(鉴频器)网络游戏,从而使S自学数据分布,如果用在影像分解军事训练已完成后,S可以从一个哈希分解细致的影像。

G和D的主要基本功能是:

G是一个生成网,它接管一个随机噪声y(哈希),通过杂讯分解影像。

D是一个辨别影像否“现实”的网。它的输出变量是f, f推选一张照片,输入E (f)推选f是一张现实照片的机率。如果是1,推选100%现实的影像,如果是0,推选不有可能的影像。

在军事训练步骤中的,分解互联网S的目的是分解尽量多的现实影像来愚弄互联网E,而E的目的是企图将S分解的骗影像与现实影像区别。这样,S和E包含一个静态的“博弈论步骤”,最后的均衡点为沃克均衡点。

通过对目的的改进,可以变更机率分解建模的变量,使随机变量与具体数据分布尽量相似。

那么,如何界定必要的改进目的或伤亡呢?

在现代的分解建模中的,一般使用统计数据的似然作为改进目的,而GAN创新地用于了另一个改进目的。

首先,引进判断建模(常见建模还包括反对矢量机和多层人工神经网络)。

其次,其改进步骤是在分解建模和判断建模两者之间寻找沃克平衡。

GAN创建的自学构建实质上是分解建模和判断建模两者之间的仿真博弈论。

分解建模的目标是尽量多地仿真、仿真和自学现实统计数据的产于规律性。

判断建模是辨别一个输出统计数据是来自现实的数据分布还是分解的建模。

通过这两个外部建模两者之间的停滞市场竞争,提升了分解和区别这两个建模的战斗能力。

当一个建模具备极强的区别战斗能力时。

如果分解的建模统计数据依然不存在误解,无法准确辨别,那么我们指出分解的建模实质上早已理解了现实统计数据的产于状况。

作者简介: 李秋键,优快云 博客专家,优快云达人课作者。
声明:本文系作者独立观点,不代表优快云立场。

 

【END】

5G之后,中国的人工智能发展趋势如何?

https://edu.youkuaiyun.com/topic/ai30?utm_source=csdn_bw

640?wx_fmt=jpeg

 热 文 推 荐 

 

 
 

 

 

 

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 优快云 文章。

640?wx_fmt=png
你点的每个“在看”,我都认真当成了喜欢
<think>嗯,用户问的是当输入全零图像时,语义分割网络的行为以及是否会导致传播错误。这个问题看起来有点技术性,不过我得仔细想想怎么回答。首先,我需要回忆一下语义分割网络的基本结构和工作原理。常见的网络比如U-Net、DeepLab等,通常都是基于卷积神经网络(CNN)的,对吧?用户提到全零输入,可能想了解网络在这种情况下如何处理,输出会是什么样子,以及是否会产生错误传播。 首先,全零输入对CNN的影响。CNN的卷积层在输入全零的情况下,卷积运算的结果取决于滤波器的偏置项。如果偏置存在,即使输入是零,经过卷积后可能会有非零的输出,尤其是经过激活函数之后。比如ReLU在输入为负时输出零,但如果偏置是正数,激活后可能会有正值。不过,如果网络中没有使用偏置项,那么卷积层的输出也会是零,但通常CNN的卷积层都是有偏置的,对吧? 然后,批归一化层(BatchNorm)的作用。即使输入全零,经过卷积后可能有非零值,但BatchNorm会根据训练时的均值和方差来标准化这些值。不过,如果输入全零,卷积后的输出可能分布异常,这时候BatchNorm可能会引入一些缩放和偏移,导致输出不是全零。这可能会让网络产生一些非零的特征图,但具体效果得看训练时的情况。 激活函数方面,比如ReLU,如果卷积后的输出加上偏置还是负数,那ReLU就会输出零,否则输出正值。所以激活后的结果可能部分为零,部分为正,取决于前面的计算。 接下来是分割网络的输出。通常语义分割使用softmax或者sigmoid来产生概率图。如果前面的特征都是零,那么softmax的输出会是均匀分布吗?比如,如果所有输入都是零,softmax每个类别的概率相等,但这种情况可能取决于网络的参数。但实际中,如果前面的层已经产生了非零的特征,那么输出可能不会是均匀的,而是由权重决定的某种分布。 然后是传播错误的问题。如果输入全零导致中间特征异常,是否会在网络中传播,导致后续处理出现错误?比如,如果某个层的输出异常,后面的层可能无法正确处理,导致分割结果错误。这要看网络的结构,比如跳跃连接或者残差块是否能缓解这个问题。比如U-Net有跳跃连接,可能将低层次的特征与解码器结合,但如果输入全零,编码器的特征可能异常,解码器可能无法恢复有用的信息,导致输出全零或者无意义的分割。 另外,用户可能关心的是在实际应用中,比如自动驾驶或医学图像处理,如果传感器故障导致输入全零,网络是否会崩溃或者输出错误结果,进而影响系统决策。这时候需要测试网络的鲁棒性,可能需要进行数据增强,或者在训练时加入全零图像作为异常情况,让网络学会处理这种情况。 可能用户没有明确提到的深层需求是,他们可能在开发或测试过程中遇到了输入全零的情况,想知道网络的行为是否符合预期,或者如何改进网络以提高鲁棒性。因此,回答中需要涵盖现象分析和解决方案建议。 总结一下,回答的结构应该是先分析各层处理全零输入的行为,然后讨论输出结果,接着探讨传播错误的可能性,最后给出解决方案和测试方法。同时,引用相关的文献,比如关于CNN结构的部分可以引用提供的引用[2],关于网络泛化能力的部分可以引用引用[1]。 需要确认LaTeX格式是否正确,比如数学公式用$...$,独立公式用$$...$$,确保没有语法错误。比如在提到卷积运算时,可以写成$W * x + b$,其中x是全零,所以结果等于b。批归一化的公式可以写成标准化后的$\hat{z} = \frac{z - \mu}{\sigma}$,然后缩放和平移$\gamma \hat{z} + \beta$。这些都需要用正确的LaTeX格式。 最后生成相关问题,可能需要包括如何测试网络的鲁棒性,如何处理全零输入,数据增强的方法,或者异常检测机制等。确保问题与用户的问题相关,并且有引导性。</think>### 语义分割网络对全零输入图像的行为分析 #### 1. 网络各层的行为 - **输入层**:全零图像$[0]_{H \times W \times C}$($H, W, C$分别为高、宽、通道数)直接输入网络。 - **卷积层**:若卷积核权重为$W$,偏置为$b$,则输出为$W * 0 + b = b$。偏置的存在会使激活函数(如ReLU)产生非零输出$f(b)$,例如$b>0$时ReLU输出$b$,否则为0[^2]。 - **批归一化(BatchNorm)**:若训练时数据分布均值为$\mu$、方差为$\sigma^2$,全零输入可能导致归一化后特征异常(如$\hat{z} = \frac{z - \mu}{\sigma}$),结合缩放参数$\gamma$和平移参数$\beta$,可能输出非零值$\gamma \hat{z} + \beta$。 - **跳跃连接**:在U-Net等结构中,编码器-解码器的跳跃连接可能传递异常特征,导致解码器输出无意义结果。 #### 2. 输出结果分析 - **分类概率异常**:若网络最终层为softmax,输入全零可能导致输出概率分布偏向特定类别(取决于偏置和权重分布),而非均匀分布。 - **分割结果表现**: - 若网络未经全零数据训练,可能输出随机噪声或恒定值(如全背景)。 - 若网络对异常输入敏感,可能生成高置信度的错误分割掩码。 #### 3. 传播错误的风险 - **前向传播错误**:全零输入导致的异常特征会逐层传播,但错误类型取决于网络结构: - 无跳跃连接的网络可能输出低置信度结果。 - 含跳跃连接的结构可能因编码器特征异常,导致解码器无法恢复有效信息。 - **系统性影响**:在流水线系统中(如自动驾驶),错误分割可能引发后续模块(如路径规划)的连锁错误,但实际影响需结合具体系统设计分析[^1]。 #### 4. 解决方案与测试方法 - **鲁棒性增强**: - 数据增强:训练时加入全零图像+随机掩码标签,强制网络学习忽略异常输入。 - 输入校验:添加前置过滤器检测全零输入,触发异常处理流程。 - **测试方法**: ```python # 生成全零输入测试样例 dummy_input = torch.zeros((1, 3, 256, 256)) output = model(dummy_input) print("输出熵值:", -torch.sum(output.softmax(dim=1) * torch.log(output.softmax(dim=1)))) ``` 熵值接近$\log(N_{class})$表示输出混乱,接近0则表示错误置信度高。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

优快云资讯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值