- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章解决TensorFlow调用Keras库函数存在的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
tensorflow在1.4版本引入了keras,封装成库。现想将keras版本的GRU代码移植到TensorFlow中,看到TensorFlow中有Keras库,大喜,故将神经网络定义部分使用Keras的Function API方式进行定义,训练部分则使用TensorFlow来进行编写。一顿操作之后,运行,没有报错,不由得一喜。但是输出结果,发现,和预期的不一样。难道是欠拟合?故采用正弦波预测余弦来验证算法模型.
部分调用keras库代码如上图所示,用正弦波预测余弦波,出现如下现象:
1
2
3
4
5
|
def
interface(_input):
tmp
=
tf.keras.layers.Dense(
10
)(_input)
vad_gru
=
tf.keras.layers.GRU(
24
, return_sequences
=
True
)(tmp)
denoise_output
=
tf.keras.layers.Dense(
1
)(vad_gru)
return
denoise_output
|
波形是断断续续的。而且最后不收敛.
运行N久。。。之后 。
基本断定是程序本身的问题,于是通过排查,发现应该是GRU的initial_state没有进行更新导致的。导致波形是断断续续的,没有学习到前一次网络的输出。于是,决定不使用Keras库实现一遍:
部分代码如下:
1
2
3
4
5
6
7
8
9
|
def
interface(_input):
tmp
=
tf.keras.layers.Dense(
10
)(_input)
gru_cell
=
tf.nn.rnn_cell.GRUCell(vad_cell_size)
with tf.name_scope(
'initial_state'
):
cell_init_state
=
gru_cell.zero_state(batch_size, dtype
=
tf.float32)
cell_outputs, cell_final_state
=
tf.nn.dynamic_rnn(
gru_cell, tmp, initial_state
=
cell_init_state, time_major
=
False
)
denoise_output
=
tf.keras.layers.Dense(
1
)(cell_outputs)
return
denoise_output, cell_init_state, cell_final_state
|
波形图如下(这才是GRU的正确打开方式啊~):
再回头看之前写的调用keras,既然知道了是initial_state没有更新,那么如何进行更新呢?
网上查找了大量的资料,说要加上 。
1
2
3
|
update_ops
=
[]
for
old_value, new_value
in
layers.updates:
update_ops.append(tf.assign(old_value, new_value))
|
但是加上去没有效果,是我加错了还是其他的,大家欢迎指出来 。
以下是我做的一些尝试,就不一一详细说明了,大家看一下,具体不再展开,有问题大家交流一下,有解决方法的,能够分享出来,感激不尽~ 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
def
interface(_input):
# input_layer = tf.keras.layers.Input([None, 1])
# input_layer = tf.keras.layers.Input(batch_shape=(50, 20, 1))
tmp
=
tf.keras.layers.Dense(
10
)(_input)
# tmp = tf.keras.layers.Dense(24)(tmp)
# with tf.variable_scope('vad_gru', reuse=tf.AUTO_REUSE):
# vad_gru, final_state = tf.keras.layers.GRU(24, return_sequences=True, return_state=True, stateful=True)(tmp)
# print(vad_gru)
# _initial_state = vad_gru.zero_state(50, tf.float32)
# tf.get_variable_scope().reuse_variables()
# vad_gru = tf.contrib.
# tmp = tf.reshape(tmp, [-1, TIME_STEPS, vad_cell_size])
gru_cell
=
tf.nn.rnn_cell.GRUCell(vad_cell_size)
# gru_cell = tf.keras.layers.GRUCell(self.vad_cell_size)
with tf.name_scope(
'initial_state'
):
cell_init_state
=
gru_cell.zero_state(batch_size, dtype
=
tf.float32)
cell_outputs, cell_final_state
=
tf.nn.dynamic_rnn(
gru_cell, tmp, initial_state
=
cell_init_state, time_major
=
False
)
# print(cell_outputs.get_shape().as_list())
# cell_outputs = tf.reshape(cell_outputs, [-1, vad_cell_size])
denoise_output
=
tf.keras.layers.Dense(
1
)(cell_outputs)
print
(denoise_output.get_shape().as_list())
# model = tf.keras.models.Model(input_layer, denoise_output)
# update_ops = []
# for old_value, new_value in model.layers[1].updates:
# update_ops.append(tf.assign(old_value, new_value))
return
denoise_output, cell_init_state, cell_final_state
|
补充知识:TensorFlow和Keras常用方法(避坑) 。
TensorFlow 。
在TensorFlow中,除法运算:
1.tensor除法会使结果的精度高一级,可能会导致后面计算类型不匹配,如float32 / float32 = float64.
2.除法需要分子分母同类型,否则报错.
产生类似错误提示如下:
-1.TypeError: x and y must have the same dtype, got tf.float32 != tf.int32 。
-2.TypeError: Input ‘y' of ‘Mul' Op has type float32 that does not match type float64 of argument ‘x'. 。
-3.ValueError: Tensor conversion requested dtype float64 for Tensor with dtype float32: ‘Tensor(“Sum:0”, shape=(), dtype=float32)' 。
-4.ValueError: Incompatible type conversion requested to type ‘int32' for variable of type ‘float32_ref' 。
解决办法:
tf.cast(a, tf.float32) # 转换成同类型即可 。
tf.boolean_mask 。
K.gather 。
K.argmax 。
K.max 。
以上这篇解决TensorFlow调用Keras库函数存在的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/u012222949/article/details/80917921 。
最后此篇关于解决TensorFlow调用Keras库函数存在的问题的文章就讲到这里了,如果你想了解更多关于解决TensorFlow调用Keras库函数存在的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id` FROM `o_cheque_request`, `o_mem
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要**SELECT count(*)**呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如
我试图找出一个文件是否存在,如果存在,验证css样式是否已经存在,如果不存在,将它们写在文件末尾... 我已经完成了这一切,但分 3 个步骤: 该文件是否存在? FileInfo fi= new Fi
我们正在开发即时消息传递应用程序,并且需要在用户的化身上用绿点显示用户 friend 的“状态”。 “状态”远远超出了“my_app_is_opened_and_on_focus”,这意味着(我猜可能
模式 Movie(title, year, director, budget, earnings) Actor(stagename, realname, birthyear) ActedIn(stag
我有一个正在尝试创建的 MySQL 触发器,但无法获得正确的语法。 触发器应该遍历一组关键字并将其与插入数据库的新帖子的标题进行匹配。如果找到匹配项,它应该将新帖子分配给该存储桶并更新存储桶的关键字集
我有 3 个表......用户、更新和碰撞。 我想向发出 api 请求的用户返回最新订单的 feed 更新,并提供显示 feed 中每个状态所需的所有数据。我还需要包括更新是否已被发出 api 请求的
我正在尝试呈现一个带有 UIView 的 UIViewController。 以下是我在 viewDidLoad 方法中尝试的代码。 //create the view controller UIVi
我正在努力弄清楚如何在不对 mysql 进行两次调用的情况下从一个表中检查两件事。 我有一个 Members 表。我想测试MemberID 列中是否存在某个值,以及PhoneNumber 列中是否存在
以下代码给出了一个没有 Do Compile 错误的循环: Loop Sheets("Snap").Rows(1).AutoFilter Field:=5, Criteria1:=List
是否可以通过检查“dig”的输出来检查域名的存在? 在绑定(bind)源中,我发现了这些常量: 0 DNS_R_NOEROR 1 DNS_R_FORMERR 2 DNS_R_SERVFAIL 3 DN
Controller 有问题 我在 Windows 上使用服务器,一切正常,但在互联网上我试图访问页面 social_apartament/beauty_life/并且找不到该页面,代码错误 404这
/** This is struct S. */ struct S(T) { static if(isFloatingPoint!T) { /// This version works
JVM 类型删除如何帮助 Clojure?没有它,Clojure 还能存在吗?如果 JVM 有具体化的类型会发生什么?也就是说,Clojure 将如何改变? 最佳答案 Clojure 根本不会有太大变
许多论文等提到对“system()”的调用是不安全且不可移植的。我不反对他们的论点。 不过,我注意到许多 Unix 实用程序都有一个等效的 C 库。如果没有,源可用于各种这些工具。 虽然许多论文和此类
在我的 Node js 应用程序中,我有一个用户登录 api。上面我在服务器端代码中创建了一个名为 customerid 的变量。现在,当用户身份验证成功时。我将他的 userid 值存储在我的 cu
我有一个工作资源管理器组,由 Ubuntu 14.04 虚拟机、网络接口(interface)、公共(public) IP 地址和存储帐户组成。我已经从这组资源中创建了一个模板。 当我尝试部署这组资源
我有一个函数createminor4(arr,锦标赛)它基本上将arr分成4组,每组8人,然后将它们一次交换到tourney 1组。从那里它插入四个{},其中有 4 个带有空数组的键。 我已经在 Ch
我有一个图表,其中有两个图例。我需要更改其中一个图例的点的大小。 我需要更改图例中“市场类型”的项目符号大小。我使用示例 here但不适用于我的图表。 我的代码如下: k <- ggplot(subs
我有 fiddle here展示我正在尝试做的事情。 我有一个动态生成的表,因此列可以按用户选择的任何顺序显示。因此,我尝试获取两个特定 header 的索引,以便可以将 CSS 类添加到这两列以供稍
我是一名优秀的程序员,十分优秀!