卷积神经网络输出所有标签的相同概率

2023-12-08

我目前正在 MNIST 上训练 CNN,随着训练的进行,输出概率 (softmax) 给出 [0.1,0.1,...,0.1]。初始值不统一,所以我不知道我是否在这里做了一些愚蠢的事情?

我只训练了15步,只是为了看看训练进展如何;尽管这个数字很低,但我认为这不会导致统一的预测?

import numpy as np
import tensorflow as tf
import imageio

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')

# Getting data

from sklearn.model_selection import train_test_split
def one_hot_encode(data):
    new_ = []
    for i in range(len(data)):
        _ = np.zeros([10],dtype=np.float32)
        _[int(data[i])] = 1.0
        new_.append(np.asarray(_))
    return new_

data = np.asarray(mnist["data"],dtype=np.float32)
labels = np.asarray(mnist["target"],dtype=np.float32)
labels = one_hot_encode(labels)
tr_data,test_data,tr_labels,test_labels = train_test_split(data,labels,test_size = 0.1)
tr_data = np.asarray(tr_data)
tr_data = np.reshape(tr_data,[len(tr_data),28,28,1])
test_data = np.asarray(test_data)
test_data = np.reshape(test_data,[len(test_data),28,28,1])
tr_labels = np.asarray(tr_labels)
test_labels = np.asarray(test_labels)

def get_conv(x,shape):
    weights = tf.Variable(tf.random_normal(shape,stddev=0.05))
    biases = tf.Variable(tf.random_normal([shape[-1]],stddev=0.05))
    conv = tf.nn.conv2d(x,weights,[1,1,1,1],padding="SAME")
    return tf.nn.relu(tf.nn.bias_add(conv,biases))

def get_pool(x,shape):
    return tf.nn.max_pool(x,ksize=shape,strides=shape,padding="SAME")

def get_fc(x,shape):
    sh = x.get_shape().as_list()
    dim = 1
    for i in sh[1:]:
        dim *= i
    x = tf.reshape(x,[-1,dim])
    weights = tf.Variable(tf.random_normal(shape,stddev=0.05))
    return tf.nn.relu(tf.matmul(x,weights) + tf.Variable(tf.random_normal([shape[1]],stddev=0.05)))

#Creating model

x = tf.placeholder(tf.float32,shape=[None,28,28,1])
y = tf.placeholder(tf.float32,shape=[None,10])

conv1_1 = get_conv(x,[3,3,1,128])
conv1_2 = get_conv(conv1_1,[3,3,128,128])
pool1 = get_pool(conv1_2,[1,2,2,1])

conv2_1 = get_conv(pool1,[3,3,128,512])
conv2_2 = get_conv(conv2_1,[3,3,512,512])
pool2 = get_pool(conv2_2,[1,2,2,1])

conv3_1 = get_conv(pool2,[3,3,512,1024])
conv3_2 = get_conv(conv3_1,[3,3,1024,1024])
conv3_3 = get_conv(conv3_2,[3,3,1024,1024])
conv3_4 = get_conv(conv3_3,[3,3,1024,1024])
pool3 = get_pool(conv3_4,[1,3,3,1])

fc1 = get_fc(pool3,[9216,1024])
fc2 = get_fc(fc1,[1024,10])

softmax = tf.nn.softmax(fc2)
loss = tf.losses.softmax_cross_entropy(logits=fc2,onehot_labels=y)
train_step = tf.train.AdamOptimizer().minimize(loss)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(15):
    print(i)
    indices = np.random.randint(len(tr_data),size=[200])
    batch_data = tr_data[indices]
    batch_labels = tr_labels[indices]
    sess.run(train_step,feed_dict={x:batch_data,y:batch_labels})

太感谢了。


您的代码存在几个问题,包括基本问题。我强烈建议您首先阅读 MNIST 的 Tensorflow 分步教程,适合 ML 初学者的 MNIST and 面向专家的深度 MNIST.

简而言之,关于您的代码:

首先,你的最后一层fc2 should not有 ReLU 激活。

其次,构建批次的方式,即

indices = np.random.randint(len(tr_data),size=[200])

就是在每次迭代中抓取随机样本,这与正确的方法相去甚远......

第三,输入网络的数据没有在 [0, 1] 中标准化,因为它们应该是:

np.max(tr_data[0]) # get the max value of your first training sample
# 255.0

第三点最初也让我感到困惑,因为在前面提到的 Tensorflow 教程中,他们似乎也没有对数据进行标准化。但仔细检查揭示了原因:如果您通过 Tensorflow 提供的实用函数(而不是像这里那样使用 scikit-learn 函数)导入 MNIST 数据,它们已经在 [0, 1] 中标准化,这是无处可归的暗示:

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
import numpy as np

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
np.max(mnist.train.images[0])
# 0.99607849

这无疑是一个奇怪的设计决策 - 据我所知,在所有其他类似的情况/教程中,规范化输入数据是管道的明确部分(参见例如喀拉拉邦示例),并且有充分的理由(当您稍后使用自己的数据时,您肯定会期望自己这样做)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卷积神经网络输出所有标签的相同概率 的相关文章

  • randomForest 包在删除一个预测类时的奇怪行为

    我正在运行一个随机森林模型 它产生的结果从统计角度来看对我来说完全没有意义 因此我确信有些东西mustrandomForest 包的代码出现错误 至少在模型的本次迭代中 预测 左侧变量是具有 3 种可能结果的政党 ID 民主党 独立党 共和
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Keras:多类 NLP 任务中 model.evaluate 与 model.predict 的准确性差异

    我正在使用以下代码在 keras 中为 NLP 任务训练一个简单模型 训练集 测试集和验证集的变量名称是不言自明的 该数据集有 19 个类 因此网络的最后一层有 19 个输出 标签也是 one hot 编码的 nb classes 19 m
  • 张量流中的复杂卷积

    我正在尝试运行一个简单的卷积 但包含复数 r np random random 1 10 10 10 i np random random 1 10 10 10 x tf complex r i conv layer tf layers c
  • libsvm 收缩启发法

    我在 C SVC 模式下使用 libsvm 和 2 次多项式内核 并且需要训练多个 SVM 在训练期间 我训练的一些 SVM 会收到以下一个或什至两个警告 WARNING using h 0 may be faster WARNING re
  • Keras model.predict 函数给出输入形状错误

    我已经在 Tensorflow 中实现了通用句子编码器 现在我正在尝试预测句子的类概率 我也将字符串转换为数组 Code if model model type universal classifier basic class probs
  • 使用预训练的 word2vec 初始化 Seq2seq 嵌入

    我对使用预训练的 word2vec 初始化tensorflow seq2seq 实现感兴趣 我已经看过代码了 嵌入似乎已初始化 with tf variable scope scope or embedding attention deco
  • TensorFlow 无法编译

    尝试从源代码编译 TensorFlow 时出现以下错误 任何想法都会有帮助 bazel out host bin solib local U S Stensorflow Spython Cgen Unn Uops Upy Uwrappers
  • 合并张量流数据集批次

    请考虑下面的代码 import tensorflow as tf import numpy as np simple features np array 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 simple labels
  • Python sklearn 多标签分类:用户警告:所有训练示例中都存在标签不是 226

    我正在尝试多标签分类问题 我的数据看起来像这样 DocID Content Tags 1 some text here 70 2 some text here 59 3 some text here 183 4 some text here
  • rpart 决策树中的 rel 误差和 x 误差有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个来自 UCI 机器学习数据库的纯分类数据框https archive ics uci edu ml datasets Diabet
  • Tensorflow-GPU安装导入错误:DLL加载失败:找不到指定的模块

    好吧 我知道这可能已经回答了问题 但我已经尝试了 stackoverflow 上建议的几乎所有技巧来安装 tensorflow gpu 并在官方文档上建议 但没有运气 我遇到了同样的错误 首先我尝试过this https towardsda
  • 从 scikit_learn 反转 MinMaxScaler

    为了为我的生成神经网络提供数据 我需要将一些数据标准化在 1 和 1 之间 我用MinMaxScaler来自 Sklearn 效果很好 现在 我的生成器将输出 1 到 1 之间的数据 如何恢复MinMaxScaler获得真实数据 让我们首先
  • 使用 tf.estimator.Estimator 加载检查点和微调

    我们正在尝试将旧的训练代码转换为更符合 tf estimator Estimator 的代码 在初始代码中 我们针对目标数据集微调原始模型 在使用以下组合进行训练之前 仅从检查点加载一些层要恢复的变量 and init fn与监控培训课程
  • keras 模型拟合:ValueError:无法找到可以处理输入的数据适配器:

    我正在构建一个简单的 CNN 模型用于多类分类 训练和测试数据位于data path根据所需的类子目录flow from directory的函数ImageDataGenerator 这是我根据数据构建和训练模型的代码 from tenso
  • 卷积 ImageNet 网络对于翻转图像具有不变性

    我正在使用深度学习 caffe 框架进行图像分类 我有一些有头像的硬币 有些是左向的 有些是右向的 为了对它们进行分类 我使用常见的方法 从预训练的 ImageNet 网络中获取权重和结构 该网络已经捕获了大量图像模式 并主要训练最后一层以
  • 如何使用tensorFlow C++ API中的fileWrite摘要在Tensorboard中查看它

    无论如何 我是否可以获得与 FileWriter 相对应的张量名称 以便我可以写出我的摘要以在 Tensorboard 中查看它们 我的应用程序是基于C 的 所以我必须使用C 来进行训练 FileWriter 不是张量 import ten
  • 大于 2GB 的 Tensorflow 图

    我正在尝试优化一个大型张量流保存模型 其中包含 10MB saving model pb 和 16GB 变量 我尝试冻结我的图表并进行一些进一步的转换 我已按照步骤操作https medium com google cloud optimi
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不

随机推荐

  • Coq 中归纳集的归纳子集

    我有一个用三个构造函数构建的归纳集 Inductive MF Set D MF cn MF gt MF gt MF dn Z gt MF gt MF 我想以某种方式定义一个新的归纳集 B 使得 B 是 MF 的子集 仅包含从 D 和 dn
  • jQuery 项目的图像大小调整

    我已经成功地自动调整每行图库的图像 具体取决于它是水平的 每行一个图像 还是垂直的 每行两个图像 现在的问题是我希望图像是可缩放的 在窗口大小调整时调整大小 但我不知道如何实现它 我该怎么做 这是我的代码 var gallery new G
  • 多阶段 Dockerfile 中共享变量:FROM 之前的 ARG 未替换

    我正在编写一个多阶段 Dockerfile达尚实用程序 ARG DARSHAN VER 3 1 6 FROM fedora 29 as build RUN dnf install y gcc make bzip2 bzip2 devel z
  • mysql 中的事件无法正常工作?

    我创建了一个在每月第一天执行的事件 活动详情如下 DELIMITER CREATE EVENT event2 ON SCHEDULE EVERY 1 MONTH STARTS 2011 05 01 00 00 00 DO BEGIN cal
  • Outlook Rest Api 发送邮件请求返回状态 400

    我尝试使用 Outlook Rest Api 和 Curl 从已签名的 Outlook 帐户发送电子邮件 然后收到此错误 Request returned status 400 这是我发送邮件的代码 private static outlo
  • 在Android中将位图图像存储到SD卡

    我的 Android 代码面临一些奇怪的问题 我在位图变量中有一个图像 想要将该文件保存到 SD 卡 我的代码如下 Bitmap IMAGE Loaded from internet servers try File sdCard Envi
  • 将单字节字符串(半角)转换为双字节(全角)

    最近我在 C 应用程序中遇到了这段代码 cDataString Strings StrConv cDataString VbStrConv Wide 据我了解 StrConv是VB的字符串函数 您可以通过包含 using Microsoft
  • JSF 2.0 中 Application#getResourceBundle() 和 ResourceBundle#getBundle() 之间的区别

    为了从资源包中检索字符串 我尝试比较这两种方法的结果 下面是代码示例 第一个例子 baseName 资源包的完全限定名称
  • 将控制台输入线保持在输出下方

    编辑 我目前正在尝试制作一个小型 tcp 聊天应用程序 发送和接收消息已经可以正常工作 但问题是 当我在收到消息时开始输入消息时 它出现在我正在编写的文本之后 截屏 http s7 directupload net images 14081
  • 如何获取 Azure IoT Hub 上设备的公共 IP 地址?

    我有兴趣获取 Azure IoT 中心上连接设备的公共 IP 地址 我已经检查了 SDK 但看不到任何获取它的方法 我的目的是通过 IP 对设备进行地理定位 这不准确 但对我有用 有什么线索吗 似乎没有这样的开箱即用功能 解决方法是将设备
  • 在现有 UIKit 应用程序中包含 SwiftUI 视图

    是否可以使用 SwiftUI 与现有 UIKit 应用程序并排构建视图 我有一个用 Objective C 编写的现有应用程序 我已经开始迁移到 Swift 5 我想知道是否可以将 SwiftUI 与现有的 UIKit xib 视图一起使用
  • 用 grid 和 gtable 拆解 ggplot

    我正在努力构建基于的双轴图ggplot对象 根据巴蒂斯特的建议 我已将问题分解为更小的部分 目前的问题是 如何删除所有数据grobs 同时保留轴 轴标签 轴刻度线和网格线 我所说的 数据 是指与以下内容相关的数据geom line and
  • Pro AngularJS - 你能帮忙解释一下这段代码吗?

    我正在读 Apress 写的一本名为 Pro AngularJS 的书 我只是想确保我理解所有代码 但我对下面的代码有点困惑 下面是书中的一个自定义过滤器 它接受 2 个参数 数据数组和属性名称 在书中 属性名称是数据中的类别键 设置它是为
  • gcc 中类型的非常量引用初始化无效,但 Visual Studio 中无效

    我有一些代码 其中 IInterface 是一个抽象类 我正在写这个 IInterface q InterfaceImpl 并在 Visual Studio 2008 中编译它并且运行良好 然后我将它移植到 gcc 项目中 突然出现这个错误
  • SQL Server - 在 WHERE 子句中使用 CASE

    我想用CASE in WHERE子句 但它返回错误 我可以在 where 子句中使用 CASE 吗 或者如何解决它 谢谢 SELECT FROM hris leave dbo tbl act inner join hris leave db
  • 如何用 C 语言按行块处理文本文件?

    我正在用 C 编写一个程序 该程序处理一个文本文件并跟踪每个唯一的单词 通过使用一个具有该单词的 char 数组和其出现次数的计数的结构 并将该结构存储到数据结构中 然而 作业中包含这样的内容 整个 txt 文件可能非常大 无法保存在主内存
  • 什么是“<调用>d__40”?

    使用 Powershell System Management Automation Cmdlet Invoke 返回类型的对象
  • 单击 HTML5 数据列表选项时执行操作

    我正在使用一个
  • 改变 CGRect (或任何结构)?

    我在我的代码中做了很多这样的事情 self sliderOne frame CGRectMake newX 0 self sliderOne frame size width self sliderOne frame size height
  • 卷积神经网络输出所有标签的相同概率

    我目前正在 MNIST 上训练 CNN 随着训练的进行 输出概率 softmax 给出 0 1 0 1 0 1 初始值不统一 所以我不知道我是否在这里做了一些愚蠢的事情 我只训练了15步 只是为了看看训练进展如何 尽管这个数字很低 但我认为