时间:2021-05-22
因为需要,要重写训练好的keras模型,虽然只具备预测功能,但是发现还是有很多坑要趟过。其中Dropout这个坑,我记忆犹新。
一开始,我以为预测时要保持和训练时完全一样的网络结构,也就是预测时用的网络也是有丢弃的网络节点,但是这样想就掉进了一个大坑!因为无法通过已经训练好的模型,来获取其训练时随机丢弃的网络节点是那些,这本身就根本不可能。
更重要的是:我发现每一个迭代周期丢弃的神经元也不完全一样。
假若迭代500次,网络共有1000个神经元, 在第n(1<= n <500)个迭代周期内,从1000个神经元里随机丢弃了200个神经元,在n+1个迭代周期内,会在这1000个神经元里(不是在剩余得800个)重新随机丢弃200个神经元。
训练过程中,使用Dropout,其实就是对部分权重和偏置在某次迭代训练过程中,不参与计算和更新而已,并不是不再使用这些权重和偏置了(预测时,会使用全部的神经元,包括使用训练时丢弃的神经元)。
也就是说在预测过程中完全没有Dropout什么事了,他只是在训练时有用,特别是针对训练集比较小时防止过拟合非常有用。
补充知识:TensorFlow直接使用ckpt模型predict不用restore
我就废话不多说了,大家还是直接看代码吧~
# -*- coding: utf-8 -*-# from util import *import cv2import numpy as npimport tensorflow as tf# from tensorflow.python.framework import graph_utilimport osos.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID'os.environ['CUDA_VISIBLE_DEVICES'] = '0'image_path = './8760.pgm'input_checkpoint = './model/xu_spatial_model_1340.ckpt'sess = tf.Session()saver = tf.train.import_meta_graph(input_checkpoint + '.meta')saver.restore(sess, input_checkpoint)# input:0作为输入图像,keep_prob:0作为dropout的参数,测试时值为1,is_training:0训练参数input_image_tensor = sess.graph.get_tensor_by_name("coef_input:0")is_training = sess.graph.get_tensor_by_name('is_training:0')batch_size = sess.graph.get_tensor_by_name('batch_size:0')# 定义输出的张量名称output_tensor_name = sess.graph.get_tensor_by_name("xuNet/logits:0") # xuNet/Logits/logitsimage = cv2.imread(image_path, 0)# 读取测试图片out = sess.run(output_tensor_name, feed_dict={input_image_tensor: np.reshape(image, (1, 512, 512, 1)), is_training: False, batch_size: 1})print(out)ckpt模型中的所有节点名称,可以这样查看
[n.name for n in tf.get_default_graph().as_graph_def().node]
以上这篇浅谈keras中Dropout在预测过程中是否仍要起作用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在Keras中可以自定义损失函数,在自定义损失函数的过程中需要注意的一点是,损失函数的参数形式,这一点在Keras中是固定的,须如下形式:defmy_loss(
在服装销售的过程中,导购员不仅起着加速销售的作用,而且也代表着商家的外在形象,服装导购销售技巧在服装销售过程中,服装导购员起着重要的作用,导购员是否能掌握服装销
Keras运行迭代一定代数以后,速度越来越慢,经检查是因为在循环迭代过程中增加了新的计算节点,导致计算节点越来越多,内存被占用完,速度变慢。判断是否在循环迭代过
终于构建出了第一个神经网络,Keras真的很方便。之前不知道Keras这么方便,在构建神经网络的过程中绕了很多弯路,最开始学的TensorFlow,后来才知道K
钉钉视频会议能看到脸,摄像头起作用,声音都能听到,也可以选择关闭。公司开会的时候是需要每个人开启摄像头功能,并且在会议过程中可以随时自行关闭或者打开。 钉钉(