首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我想将我的CNN模型的特定预测更改为概率。

我想将我的CNN模型的特定预测更改为概率。
EN

Stack Overflow用户
提问于 2020-11-07 17:24:39
回答 1查看 73关注 0票数 1

我训练了一个模型来将图片分为两种不同的类型。一切都运行得很好,但我的模型只能做一个特定的预测(在我的例子中是1或0),但我感兴趣的是一个更像概率的预测(例如90%1和10%0)。我的代码中现在应该修改的部分在哪里?是不是sigmoid函数最终决定了它是1还是0?帮帮忙就好了。提前谢谢。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from keras.callbacks import TensorBoard
from keras import regularizers
from keras.models import Sequential
from keras.layers import Activation, Dropout, Flatten, Dense, Conv2D, MaxPooling2D
from keras.optimizers import Adam
from keras.metrics import categorical_crossentropy
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
from keras.layers.normalization import BatchNormalization

from utils import DataGenerator, PATH

train_path = 'Dataset/train'
valid_path = 'Dataset/valid'
test_path = 'Dataset/test'

model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape=(640, 640, 1), padding='same', activation='relu',
                 kernel_regularizer=regularizers.l2(1e-4),
                 bias_regularizer=regularizers.l2(1e-4)))
model.add(MaxPooling2D(pool_size=(4, 4)))

model.add(Conv2D(32, (3, 3), activation='relu',
                 kernel_regularizer=regularizers.l2(1e-4),
                 bias_regularizer=regularizers.l2(1e-4)))
model.add(MaxPooling2D(pool_size=(5, 5)))

model.add(Conv2D(64, (3, 3), activation='relu',
                 kernel_regularizer=regularizers.l2(1e-4),
                 bias_regularizer=regularizers.l2(1e-4)))
model.add(MaxPooling2D(pool_size=(6, 6)))

model.add(Flatten())
model.add(Dense(64, activation='relu',
                kernel_regularizer=regularizers.l2(1e-4),
                bias_regularizer=regularizers.l2(1e-4)))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid',
                kernel_regularizer=regularizers.l2(1e-4),
                bias_regularizer=regularizers.l2(1e-4)))
print(model.summary())

model.compile(loss='binary_crossentropy', optimizer=Adam(lr=1e-3), metrics=['accuracy'])

epochs = 50
batch_size = 16

datagen = DataGenerator()
datagen.load_data()

model.fit_generator(datagen.flow(batch_size=batch_size), epochs=epochs, validation_data=datagen.get_validation_data(),
                    callbacks=[TensorBoard(log_dir=PATH+'/tensorboard')])

#model.save_weights('first_try.h5')
model.save('second_try')

如果我尝试在我的模型中获得一张图片,如下所示:

代码语言:javascript
运行
AI代码解释
复制
path = 'train/clean/picturenumber2'  
def prepare(filepath):   
  IMG_SIZE = 640    
  img_array = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)    
  new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))   
  return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1) 

model = tf.keras.models.load_model('second_try') 
prediction = model.predict(prepare(path))
print(prediction)

如果我放入一个包含多张图片的列表,我也会得到这样的输出:[[1.]]。这个预测本身似乎起作用了。

EN

回答 1

Stack Overflow用户

发布于 2020-11-07 18:13:36

简答:将最后一层中的sigmoid激活函数更改为softmax

为什么?

因为sigmoid输出范围是0.0到1.0,所以要对此输出进行有意义的解释,您需要选择一个适当的阈值,高于该阈值表示正类,低于该阈值的任何值都表示为负类。(对于二进制分类问题)

即使softmax也有相同的输出范围,但不同的是它的输出是 here上更多的归一化类概率,所以如果你的模型在任何给定的输入上输出0.99,那么它可以被解释为该模型99.0%的置信度为正类,0.1%的置信度为负类。

更新:正如@amin建议的那样,如果你需要归一化概率,你应该做更多的更改才能正常工作。

  1. 修改数据生成器以输出2个类/标签,而不是1个。

  1. 将最后一个密集层从1个节点更改为2个节点。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64730471

复制
相关文章
Collectors.toMap 当value为空时,报空指针
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors;
botkenni
2022/11/12
3.1K0
Collectors.toMap 当value为空时,报空指针
当仓库不为空、从gitee远程仓库拉取
1.从gitee远程仓库拉取
2020/10/23
1.1K0
当仓库不为空、从gitee远程仓库拉取
Webrtc及WEB端音视频设备获取及流处理
注意本文和之前Electron获取设备的文章有重合,但是也不是一样的,因为在Electron中我们不但能用HTML的API,也能使用Electron的API,但是WEB中就有局限了,在WEB中就实现不了直接分享主屏幕,必须用户选择。
码客说
2022/09/23
2.5K0
Webrtc及WEB端音视频设备获取及流处理
SqlDataSource WEB控件:当DeleteCommandType=”storedProcedure”时「建议收藏」
设计 Users表:UserID,Name Articles表:ArticleID,UserID,ArticleTitle 生成视图:
全栈程序员站长
2022/09/18
2530
Web前端WebRTC攻略(二) 音视频设备及数据采集
2021年1月26日,W3C 和 IETF 同时宣布 WebRTC(Web Real-Time Communications,Web 实时通信)现发布为正式标准,标志着 WebRTC正式走进舞台。尽管如此,WebRTC 早已在视频会议和直播中得到了广泛的应用,成为了线上通信及协作服务的基石。IMWeb 团队是国内最早研究 WebRTC 的团队之一,在腾讯课堂、企鹅辅导等应用中都有实践。这是 WebRTC 系列的第二篇,希望可以帮助你更好的了解音视频。 一、音视频采集基本概念 在讲浏览器提供的用 JS 采集音
用户1097444
2022/06/29
3.6K0
Web前端WebRTC攻略(二) 音视频设备及数据采集
通过 web 录制视频(摄像头)并上传
在用户通过提示允许的情况下,打开系统上的相机或屏幕共享和/或麦克风,并提供 MediaStream 包含视频轨道和/或音频轨道的输入。
张云飞Vir
2021/04/28
2K0
WebRTC 之 MediaRecorder_ 用你的浏览器录音和录像
既然现在的笔记本电脑,平板,手机都有摄像头和麦克风,那么录音和录像就是一件非常容易的事情了,但是如果不用别人写好的录音录像程序,让你自己来实现一个录音和录像应用,其实也没那么简单。
前端小tips
2021/11/30
1.9K0
WebRTC 之 MediaRecorder_ 用你的浏览器录音和录像
从web图片裁剪出发:了解H5中的Blob
刚开始做前端的时候,有个功能卡住我了,就是裁剪并上传头像。当时两个方案摆在我面前,一个是flash,我不会。另一个是通过iframe上传图片,然后再上传坐标由后端裁剪,而我最终的选择是后者。有人会疑惑,为什么不用H5的Canvas和FormData,第一要考虑ie8的兼容性,第二那时候眼界没到,这种新东西光是听听都怕。   后来随着Mobile项目越做越多,类似的功能开发得也越来越多,Canvas+FormData成为了标配方案。但做的多了却一直没有静下心来研究,浏览器怎么使用H5的方式裁剪并把文件发送出去
李海彬
2018/03/27
2.1K0
从web图片裁剪出发:了解H5中的Blob
使用h5新标准MediaRecorder API在web页面进行音视频录制
Media Recorder,顾名思义是控制媒体录制的api,在原生app开发中,是一个应用广泛的api,用于在app内录制音频和视频。
WendyGrandOrder
2018/11/26
22.6K11
使用h5新标准MediaRecorder API在web页面进行音视频录制
前端实现在浏览器网页中录音
页面中实现录音需要使用浏览器提供的MediaRecorder API,所以要实现页面录音就需要浏览器支持MediaStream Recording相关的功能,即浏览器能够获取浏览器的录音权限。
winty
2021/01/05
3.4K0
前端实现在浏览器网页中录音
浅析 Web 录屏技术方案与实现
本文首发于政采云前端团队博客:浅析 Web 录屏技术方案与实现 https://www.zoo.team/article/webrtc-screen
政采云前端团队
2021/11/12
2K0
静默安装从入门到转行!
Aadroid的应用管理主要由PMS(PackageManagerService)来负责管理;上层由PackageManager来进行管理,通过PM我们可以得到设备上的所有安装包信息,包括未安装和安装过的, 未安装的包信息采用反射和未暴露的API,也可以进行深度解析得到我们想要的信息。而应用的安装和卸载也由PM来负责。
开发者技术前线
2020/11/23
1K0
静默安装从入门到转行!
快速入门 WebRTC:屏幕和摄像头的录制、回放、下载
不知你是否用过 web 版的视频面试,或者 web 版在线会议,它们都支持分享屏幕、也能开启摄像头。这些都是浏览器上实现的,作为前端开发,是否好奇过这些功能的实现原理呢?
神说要有光zxg
2021/12/26
3.1K0
给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我
周末,公司里的测试小妹给我发消息说,她昨晚又加班到很晚,原因是研发要求提复杂bug时需要附上具体的操作流程以便详细了解操作过程和复现。最好能提供一个录制视频,这不是难为我们测试小妹嘛?随后她问我有没有好用,免费的录制屏幕的软件。我答应帮她找找。 看到这里你可能以为这是一篇软件推荐文章,但其实这是一篇造轮子的文章,经过一番搜索,我发现大多数的录屏软件,不是比较笨重,就是有些需要付费,或者无法跨平台使用。于是我想能不能自己开发一个录屏工具,这个想法一旦产生就无法停止,在造轮子之前我需要简单整理一下需求范围,以便挑选合适的工具来实现。
拿我格子衫来
2022/01/24
1.3K0
给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我
Web Audio API 介绍和 web 音频应用案例分析
本文主要介绍了如何使用 Web Audio API 实现音频的剪辑、处理、合成和播放功能。作者通过实例演示了如何使用 Web Audio API 实现音频的剪辑、处理、合成和播放功能,包括音频的选帧、剪辑、淡入淡出、变速、变调、合成、播放控制等功能。此外,作者还介绍了 Web Audio API 的音频处理、合成和播放控制的用法,并提供了详细的示例代码。
QQ音乐技术团队
2017/11/21
7.5K0
Web Audio API 介绍和 web 音频应用案例分析
录屏工具开发
https://juejin.cn/post/6915287057795874824
@超人
2021/02/26
2K0
录屏工具开发
Ajax文件上传时:Formdata、File、Blob的关系
“Formdata”接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去。
房东的狗丶
2023/02/17
3.3K0
Electron / Chromium 屏幕录制 - 那些我踩过的坑
Web 屏幕录制也许对我们来说并不陌生,最常见的场景,例如:各种视频会议、远程桌面软件,远程会议软件的出现大大方便了人们的交流与沟通,在 WFH 期间对众多企业的线上运转起到关键的作用。除了屏幕的实时分享,录屏的应用还存在另一种应用场景,即“记录实时操作并保留现场,方便后续追溯与回放”,即是我们业务的主要场景。对于我们的业务,强依赖该功能的稳定性。以下是我们业务对该功能的一些硬性指标:
ConardLi
2021/09/29
4.3K1
Electron / Chromium 屏幕录制 - 那些我踩过的坑
用JS轻松实现一个录音、录像、录屏工具库
最近项目遇到一个要在网页上录音的需求,在一波搜索后,发现了 react-media-recorder[1] 这个库。今天就跟大家一起研究一下这个库的源码吧,从 0 到 1 来实现一个 React 的录音、录像和录屏功能。
写代码的海怪
2022/03/29
1.2K0
用JS轻松实现一个录音、录像、录屏工具库
点击加载更多

相似问题

SSL-安装apache2时出错

30

使用NGINX和SSL时出现的问题

10

创建分区时出错

10

创建模块时出错

20

创建debian包时出错。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文