【问题标题】:How to correctly organize Tensorflow model layers?如何正确组织 TensorFlow 模型层?
【发布时间】:2020-11-14 14:20:56
【问题描述】:

世界你好! 我们正在编写自己的 AI,我们努力创建正确的模型层。 我们必须在神经网络中输入一个 list,其中包含 n lists 和 m tuples

e.x. list = numpy.array([ [[1,2,4],[5,6,8]] , [[5,6,0],[7,2,4]] ])

我们期望得到的结果不是 0 就是 1(相信我是有道理的)

这就是我们现在所拥有的:

tpl = 3 # because we have tuples
nl = 2 # number of lists we have
model = tf.keras.Sequential([
# this should be entry layer that understands our list
            tf.keras.layers.Dense(nl * tpl , input_shape=(nl, tpl), activation='relu'),

#hidden layers..
            tf.keras.layers.Dense(64, input_shape=(nl, tpl), activation='sigmoid'),

#our output layer with 2 nodes that one should contain 0, other 1, because we have 2 labels ( 0 and 1 )
            tf.keras.layers.Dense(2, input_shape=(0, 1), activation='softmax')
        ])

但我们得到以下错误:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

InvalidArgumentError:  Incompatible shapes: [56,2,2] vs. [56,1]
     [[node huber_loss/Sub (defined at <ipython-input-25-08eb2e0b395e>:53) ]] [Op:__inference_train_function_45699]

Function call stack:
train_function

如果我们总结我们的模型,它会给出以下结构:

Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)             (None, 2, 6)              24        
_________________________________________________________________
dense_2 (Dense)             (None, 2, 64)             448       
_________________________________________________________________
dense_3 (Dense)             (None, 2, 2)              130       
=================================================================

最后,

我们了解到的是我们提供的数据与最后一层不兼容,那么我们如何将最后一层转换为=>形状(None, 2)或者什么是正确的方法解决这个错误?

【问题讨论】:

    标签: python tensorflow keras neural-network artificial-intelligence


    【解决方案1】:

    您可以在输出层之前使用Flatten()GlobalAveragePooling1D。完整示例:

    import numpy
    import tensorflow as tf
    
    list = numpy.array([[[1., 2., 4.], [5., 6., 8.]], [[5., 6., 0.], [7., 2., 4.]]])
    
    tpl = 3  
    nl = 2   
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(nl * tpl, input_shape=(nl, tpl), activation='relu'),
        tf.keras.layers.Dense(64, input_shape=(nl, tpl), activation='sigmoid'),
        tf.keras.layers.GlobalAveragePooling1D(),
        tf.keras.layers.Dense(2, input_shape=(0, 1), activation='softmax')
    ])
    
    model.build(input_shape=(nl, tpl))
    
    model(list)
    
    <tf.Tensor: shape=(2, 2), dtype=float32, numpy=
    array([[0.41599566, 0.58400434],
           [0.41397247, 0.58602756]], dtype=float32)>
    

    虽然你不会只得到 0 和 1,但你会得到每个班级的概率。你也应该隐藏内置关键字list

    Model: "sequential_4"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    dense_12 (Dense)             (None, 2, 6)              24        
    _________________________________________________________________
    dense_13 (Dense)             (None, 2, 64)             448       
    _________________________________________________________________
    global_average_pooling1d (Gl (None, 64)                0         
    _________________________________________________________________
    dense_14 (Dense)             (None, 2)                 130       
    =================================================================
    Total params: 602
    Trainable params: 602
    Non-trainable params: 0
    _________________________________________________________________
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2019-02-13
      相关资源
      最近更新 更多