代码之家  ›  专栏  ›  技术社区  ›  hellowolrd

用tensorflow.keras连接两个模型

  •  0
  • hellowolrd  · 技术社区  · 5 年前

    我目前正在用MNIST数据集研究用于图像分析的神经网络模型。我第一次只用图像来建立第一个模型。然后我创建了一个附加变量,它是: 当数字实际上在0到4之间时为0,大于或等于5时为1。

    因此,我想建立一个模型,可以获取这两个信息:数字的图像和我刚刚创建的附加变量。

    我创建了两个第一个模型,一个用于图像,另一个用于外部变量,如下所示:

    import tensorflow as tf
    from tensorflow import keras
    
    
    image_model = keras.models.Sequential()
    
    #First conv layer :
    image_model.add( keras.layers.Conv2D( 64, kernel_size=3,
                                                   activation=keras.activations.relu,
                                          input_shape=(28, 28, 1) ) )
    
    #Second conv layer :
    image_model.add( keras.layers.Conv2D( 32, kernel_size=3, activation=keras.activations.relu ) )
    
    #Flatten layer :
    image_model.add( keras.layers.Flatten() )
    
    print( image_model.summary(), '\n' )
    
    
    
    
    info_model = keras.models.Sequential()
    
    info_model.add( keras.layers.Dense( 5, activation=keras.activations.relu, input_shape=(1,) ) )
    
    print( info_model.summary() )
    

    然后我想连接两个最后的层,最后放置另一个带有softmax的密集层来预测类概率。

    我知道使用Keras函数API是可行的,但是如何使用tf.Keras呢?

    0 回复  |  直到 5 年前
        1
  •  2
  •   John Doe    5 年前

    你可以很容易地在TF中使用Keras的函数API(用TF 2.0测试过):

    import tensorflow as tf
    
    # Image
    input_1 = tf.keras.layers.Input(shape=(28, 28, 1))
    conv2d_1 = tf.keras.layers.Conv2D(64, kernel_size=3,
                                      activation=tf.keras.activations.relu)(input_1)
    
    # Second conv layer :
    conv2d_2 = tf.keras.layers.Conv2D(32, kernel_size=3,
                                      activation=tf.keras.activations.relu)(conv2d_1)
    
    # Flatten layer :
    flatten = tf.keras.layers.Flatten()(conv2d_2)
    
    # The other input
    input_2 = tf.keras.layers.Input(shape=(1,))
    dense_2 = tf.keras.layers.Dense(5, activation=tf.keras.activations.relu)(input_2)
    
    # Concatenate
    concat = tf.keras.layers.Concatenate()([flatten, dense_2])
    
    n_classes = 4
    # output layer
    output = tf.keras.layers.Dense(units=n_classes,
                                   activation=tf.keras.activations.softmax)(concat)
    
    full_model = tf.keras.Model(inputs=[input_1, input_2], outputs=[output])
    
    print(full_model.summary())
    

    这给了你 the model you are looking for.