为了账号安全,请及时绑定邮箱和手机立即绑定

Keras 模型输出是 float32 而不是 uint8... 尽管数据标签是 uint8

Keras 模型输出是 float32 而不是 uint8... 尽管数据标签是 uint8

白猪掌柜的 2021-12-16 16:40:20
我正在训练一个模型来预测医学图像中的分割。在训练数据中,输入数据类型为:numpy.float64,真实标签类型为:numpy.uint8。问题是出于某种原因,我的模型产生了 numpy.float32 的输出类型。# Defining the modelsegmenter = Model(input_img, segmenter(input_img))# Training the model (type of train_ground is numpy.uint8)segmenter_train = segmenter.fit(train_X, train_ground, batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(valid_X, valid_ground))型号定义:def segmenter(input_img):    #encoder    #input = 28 x 28 x 1 (wide and thin)    conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img) #28 x 28 x 32    conv1 = BatchNormalization()(conv1)    conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv1)    conv1 = BatchNormalization()(conv1)    pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) #14 x 14 x 32    conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(pool1) #14 x 14 x 64    conv2 = BatchNormalization()(conv2)    conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv2)    conv2 = BatchNormalization()(conv2)    pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) #7 x 7 x 64    conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool2) #7 x 7 x 128 (small and thick)    conv3 = BatchNormalization()(conv3)    conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv3)    conv3 = BatchNormalization()(conv3)
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

Sigmoid 返回一个实数

最后一层恰好是 sigmoid 激活函数。它返回一个从 0 到 1 的实数,而不是一个整数。

此外,重要的是误差度量,即正确答案与计算值之间的差异,是连续的而不是离散的,因为它是可微的,并且允许通过反向传播正确学习神经网络权重。

只需转换和舍入

为了训练网络,只需将真值标签转换为浮点值。

一旦你训练了网络并想要使用它的输出,只需将它们四舍五入以将它们转换为整数 - sigmoid 激活非常适合于此。


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信