python - 如何在 keras 中同时训练多个神经网络?

标签 python graph tensorflow neural-network keras

如何多次训练 1 个模型并在输出层组合它们?

例如:

model_one = Sequential() #model 1
model_one.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
model_one.add(Flatten())
model_one.add(Dense(128, activation='relu'))

model_two = Sequential() #model 2
model_two.add(Dense(128, activation='relu', input_shape=(784)))
model_two.add(Dense(128, activation='relu'))

model_???.add(Dense(10, activation='softmax')) #combine them here

model.compile(loss='categorical_crossentropy', #continu together
          optimizer='adam',
          metrics=['accuracy'])


model.fit(X_train, Y_train, #continu together somehow, even though this would never work because X_train and Y_train have wrong formats
      batch_size=32, nb_epoch=10, verbose=1)

我听说我可以通过图模型来做到这一点,但我找不到任何关于它的文档。

编辑:回复以下建议:

A1 = Conv2D(20,kernel_size=(5,5),activation='relu',input_shape=( 28, 28, 1))
---> B1 = MaxPooling2D(pool_size=(2,2))(A1)

抛出这个错误:

AttributeError: 'Conv2D' object has no attribute 'get_shape'

最佳答案

图形符号会为你做这件事。本质上,您为每一层提供了一个唯一的句柄,然后使用末尾括号中的句柄链接回上一层:

layer_handle = Layer(params)(prev_layer_handle)

请注意,第一层必须是没有先前连接的 Input(shape=(x,y))

然后当你制作你的模型时,你需要告诉它它需要一个列表的多个输入:

model = Model(inputs=[in_layer1, in_layer2, ..], outputs=[out_layer1, out_layer2, ..])

最后,当您训练它时,您还需要提供与您的定义相对应的输入和输出数据列表:

model.fit([x_train1, x_train2, ..], [y_train1, y_train2, ..])

与此同时,其他一切都是一样的,所以您只需将以上内容组合在一起即可为您提供所需的网络布局:

from keras.models import Model
from keras.layers import Input, Convolution2D, Flatten, Dense, Concatenate

# Note Keras 2.02, channel last dimension ordering

# Model 1
in1 = Input(shape=(28,28,1))
model_one_conv_1 = Convolution2D(32, (3, 3), activation='relu')(in1)
model_one_flat_1 = Flatten()(model_one_conv_1)
model_one_dense_1 = Dense(128, activation='relu')(model_one_flat_1)

# Model 2
in2 = Input(shape=(784, ))
model_two_dense_1 = Dense(128, activation='relu')(in2)
model_two_dense_2 = Dense(128, activation='relu')(model_two_dense_1)

# Model Final
model_final_concat = Concatenate(axis=-1)([model_one_dense_1, model_two_dense_2])
model_final_dense_1 = Dense(10, activation='softmax')(model_final_concat)

model = Model(inputs=[in1, in2], outputs=model_final_dense_1)

model.compile(loss='categorical_crossentropy', #continu together
              optimizer='adam',
              metrics=['accuracy'])

model.fit([X_train_one, X_train_two], Y_train,
          batch_size=32, nb_epoch=10, verbose=1)

文档可以在 Functional Model API 中找到.我建议阅读其他问题或查看 Keras' repo也因为文档目前没有很多示例。

关于python - 如何在 keras 中同时训练多个神经网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872982/

相关文章:

python - 如何在 Tensorflow 中使用指数移动平均线

python - 在 CPU 而不是 GPU 上运行 BERT

python - 从 Python 请求模块 POST 时忽略重定向?

Python - 使用列表的 RPG 名称生成器

python - 如何在初始化方面改进我的 Trie 实现?

c++ - C++ 中的图/边类构造函数

r - 如何在R中制作不同半径的圆弧图?

python - 在 tensorflow 中,我如何从生成器读取我的预测?

python - 如何使用 BeautifulSoup 和 Python 从 <div> 标签内的 <a href> 标签获取信息?

algorithm - 适用于图形的 ADT