【问题标题】:keras (tensorflow backend) conditional assignment with K.switch()使用 K.switch() 进行 keras(张量流后端)条件分配
【发布时间】:2018-10-17 11:48:40
【问题描述】:

我正在尝试实现类似

if np.max(subgrid) == np.min(subgrid):
    middle_middle = cur_subgrid + 1
else:
    middle_middle = cur_subgrid

由于条件只能在运行时确定,我使用 Keras 语法如下

middle_middle = K.switch(K.max(subgrid) == K.min(subgrid), lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)

但是我收到了这个错误:

<ipython-input-112-0504ce070e71> in col_loop(j, gray_map, mask_A)
     56 
     57 
---> 58             middle_middle = K.switch(K.max(subgrid) == K.min(subgrid), lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
     59 
     60             print ('ml',middle_left.shape)

/nfs/isicvlnas01/share/anaconda3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in switch(condition, then_expression, else_expression)    2561         The selected tensor.    2562     """
-> 2563     if condition.dtype != tf.bool:    2564         condition = tf.cast(condition, 'bool')    2565     if not callable(then_expression):

AttributeError: 'bool' object has no attribute 'dtype'

middle_middlecur_subgrid 和 subgrid 都是 NxN 张量。任何帮助表示赞赏。

【问题讨论】:

    标签: if-statement tensorflow keras switch-statement backend


    【解决方案1】:

    我认为问题在于 K.max(subgrid) == K.min(subgrid) 您正在创建一个比较两个张量对象的 python boolean,而不是包含比较值的 tensorflow 布尔张量两个输入张量的

    也就是说,你写的东西会被评价为

    K.switch(False, lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
    

    而不是

    comparison = ... # Some tensor, that at runtime will contain True if min and max are the same, False otherwise. 
    K.switch(comparison , lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
    

    所以你需要做的是使用keras.backend.equal()而不是==

    K.switch(K.equal(K.max(subgrid),K.min(subgrid)), lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
    

    【讨论】:

    • PS:很抱歉我现在不能测试这个,所以我希望它可以工作。
    • 非常感谢!这正是原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多