小编Iva*_*van的帖子

如何将类型提示与字典和 google protobuf 枚举一起使用?

我试图使用 protobuf 枚举作为字典中值的类型,但由于某种原因它不起作用。

我在原型中的枚举定义是:

enum Device {
  UNSPECIFIED = 0;
  ON = 1;
  OFF = 2;
}
Run Code Online (Sandbox Code Playgroud)

编译导入成功后,以下代码会报错。

from devices_pb2 import Device

def foo(device: Device) -> Dict[str, Device]:
    pass
Run Code Online (Sandbox Code Playgroud)

错误信息:

    def foo(device: Device) -> Dict[str, Device]:
  File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 254, in inner
    return func(*args, **kwds)
  File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 629, in __getitem__
    params = tuple(_type_check(p, msg) for p in params)
  File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 629, in <genexpr>
    params = tuple(_type_check(p, msg) for p in params)
  File "/home/ivan/anaconda3/envs/py37/lib/python3.7/typing.py", line 142, in _type_check
    raise …
Run Code Online (Sandbox Code Playgroud)

python enums type-hinting protocol-buffers

11
推荐指数
1
解决办法
5822
查看次数

tf.keras中的批次归一化不计算平均均值和平均方差

在这里提出一个类似的未解决的问题。我正在测试一种深度增强学习算法,该算法在张量流中使用keras后端。我对tf.keras不太熟悉,不过我想添加批处理规范化层。因此,我尝试使用tf.keras.layers.BatchNormalization(),但是由于update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)为空,它不会更新平均均值和方差。

使用常规tf.layers.batch_normalization似乎很好。但是,由于完整的算法有些复杂,因此我需要找到一种使用方法tf.keras

由于不为空,因此标准tf层将batch_normed = tf.layers.batch_normalization(hidden, training=True)更新平均值update_ops

[
    <tf.Operation 'batch_normalization/AssignMovingAvg' type=AssignSub>, 
    <tf.Operation 'batch_normalization/AssignMovingAvg_1' type=AssignSub>, 
    <tf.Operation 'batch_normalization_1/AssignMovingAvg' type=AssignSub>, 
    <tf.Operation 'batch_normalization_1/AssignMovingAvg_1' type=AssignSub>
]
Run Code Online (Sandbox Code Playgroud)

无效的最小示例:

import tensorflow as tf
import numpy as np

tf.reset_default_graph()
graph = tf.get_default_graph()
tf.keras.backend.set_learning_phase(True)

input_shapes = [(3, )]
hidden_layer_sizes = [16, 16]

inputs = [
    tf.keras.layers.Input(shape=input_shape)
    for input_shape in input_shapes
]

concatenated = tf.keras.layers.Lambda(
    lambda x: tf.concat(x, axis=-1)
)(inputs) …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow batch-normalization

6
推荐指数
1
解决办法
2595
查看次数