【问题标题】:Image to image mapping in keraskeras 中的图像到图像映射
【发布时间】:2020-01-03 13:38:15
【问题描述】:

我是机器学习的新手。我有一个二维数组(图像)需要映射到另一个二维数组(图像)。在分类问题中,所有示例都使用输出为 1 的Dense 层。但是,我的问题是简单的映射和图像到另一个图像。 如何在 keras 中指定输出 2Darray(image)。请在下面找到示例代码。我需要更改架构以提供与输入(2Darray)相同大小的输出。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(3, 150, 150)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

【问题讨论】:

    标签: python machine-learning keras conv-neural-network


    【解决方案1】:

    您需要的是一些自动编码器对称结构。与普通架构不同,您的输出将是 3D,因为您有图片作为输出。然后,您可以使用与输入/输出相同的数据来拟合模型。下面是一个生成数据的简单示例:

    from keras.models import Sequential
    from keras.layers import Conv2D, MaxPooling2D, Dropout, UpSampling2D
    import numpy as np
    
    input = np.random.rand(10, 30, 30)
    
    input = input[..., None] # keras needs 4D input, so add 1 dimension
    
    model = Sequential()
    model.add(Conv2D(32, (3, 3), input_shape=(30, 30, 1), activation='relu', padding='same'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
    model.add(Dropout(0.5))
    model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
    model.add(UpSampling2D((2, 2)))
    model.add(Conv2D(1, (3, 3), activation='sigmoid', padding='same'))
    
    model.compile(loss='mean_squared_error', optimizer='adam')
    
    model.fit(input, input, batch_size=8, epochs=1)
    

    【讨论】:

    • 非常感谢,真的很有帮助
    • 请注意,复选标记不是赞成票,而是表示答案是问题的解决方案。因此,每个帖子只能提供一次。 you may accept the answer that you believe is the best solution to your problem.
    • 还有一个问题。我仍然对那个例子感到困惑。我正在尝试做一个与此类似的 2D 示例,但仍然感到困惑。我的输入图像:30*30,我有 10 个训练图像我的输出图像:30*30。很抱歉问这个问题,但你能告诉我如何使它适用于这个例子。在您的示例中,当我预测时,它需要完整的 4D 矩阵
    • 当然。我编辑了这个例子。然而,Keras 需要 4D 输入。因此,您需要为图片添加尺寸以使其正常工作。它只是无法处理 3D 输入。
    • 再次抱歉打扰。但是,当我只选择 10 个图像中的图像时,预测它给了我错误,需要完整的 10 个。 p = Input[0,:,:,:] pred = model.predict(p) 所以,我需要每次都使用完整的 4D 矩阵??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多