gpt4 book ai didi

python - 如何使用图像和单独的值作为输入来训练 Keras 模型?混合输入

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:41 29 4
gpt4 key购买 nike

我正在为我的自主直升机构建一个强化学习代理。我的纯图像输入 Keras (1.0.7) 模型如下所示:

image_model = Sequential()
image_model.add(Convolution2D(32, 8, 8, subsample=(4, 4), input_shape=(1, 120, 215)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 4, 4, subsample=(2, 2)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 3, 3, subsample=(1, 1)))
image_model.add(Activation('relu'))
image_model.add(Flatten())
image_model.add(Dense(512))
image_model.add(Activation('relu'))
image_model.add(Dense(nb_actions))
image_model.add(Activation('linear'))

为了正确学习,除了纯图像(方向、我的直升机的位置等)之外,我还必须向我的模型传递一些额外的值。我想我必须要生成一个输出层或多个输出层的网络架构流。

image_model = Sequential()
image_model.add(Convolution2D(32, 8, 8, subsample=(4, 4), input_shape=input_shape))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 4, 4, subsample=(2, 2)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 3, 3, subsample=(1, 1)))
image_model.add(Activation('relu'))
image_model.add(Flatten())
image_model.add(Dense(512))
image_model.add(Activation('relu'))


value_model = Sequential()
value_model.add(Flatten(input_shape=values))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))



model = Sequential()

#merge together somehow

model.add(Dense(nb_actions))
model.add(Activation('linear'))

合并 API of Keras在我的理解中是为了合并图像和图像。如何将这些不同类型的输入整合在一起?

编辑:这是我对我想做的事情的尝试。我想在每个时间步用一张图像和一个单独的值训练我的代理。由于我认为我不应该将单独的值与 conv 网络流中的图像一起传递,因此我希望有第二个值流,然后最后将图像和值(value)网络结合在一起。

INPUT_SHAPE = (119, 214)
WINDOW_LENGTH = 1

img_input = (WINDOW_LENGTH,) + INPUT_SHAPE

img = Convolution2D(32, 8, 8, subsample=(4, 4), activation='relu', input_shape=img_input)
img = Convolution2D(64, 4, 4, subsample=(2, 2), activation='relu', input_shape=img)
img = Convolution2D(64, 3, 3, subsample=(1, 1), activation='relu', input_shape=img)
img = Flatten(input_shape=img)
img = Dense(512, activation='relu', input_shape=img)


value_input = (1,2)
value = Flatten()(value_input)
value = Dense(16, activation='relu')(value)
value = Dense(16, activation='relu')(value)
value = Dense(16, activation='relu')(value)

actions = Dense(nb_actions, activation='linear')(img)(value)


model = Model([img_input, value_input], [actions])

img = Convolution2D(32, 8, 8, subsample=(4, 4), activation='relu', input_shape=img_input)img = Convolution2D(32, 8 , 8, 子样本=(4, 4), activation='relu')(img_input)样式不起作用。

我也不知道如何在 actions = Dense(nb_actions, activation='linear')(img)(value)

中将流放在一起

最佳答案

为此,您将不得不使用模型类 API 而不是顺序 API。

不知道你想在这里实现什么,我希望下面的代码能帮助你

inp = Input((1, 120, 215))
x = Convolution2D(32, 8, 8, subsample=(4, 4), activation='relu')(inp)
x = Convolution2D(64, 4, 4, subsample=(2, 2), activation='relu')(x)
x = Convolution2D(64, 3, 3, subsample=(1, 1), activation='relu')(x)
x = Flatten()(x)
x = Dense(512, activation='relu')(x)

x_a = Dense(nb_actions, name='a', activation='linear')(x)
x_b = Dense(nb_classes, activation='softmax', name='b')(x)

model = Model([inp], [x_a, x_b])
model.compile(Adam(lr=0.001), loss=['mse', 'categorical_crossentropy'], metrics=['accuracy'],
loss_weights=[.0001, 1.]) #adjust loss-Weights
model.fit(train_feat, [train_labels_a, train_labels_b], batch_size=batch_size, nb_epoch=3,
validation_data=(val_feat, [val_labels_a, val_labels_b]))

编辑如果您需要 2 个输入模型和 1 个输出模型,请尝试以下操作:

from keras.models import Sequential
from keras.layers import Dense, Concatenate

image_model = Sequential()
image_model.add(Convolution2D(32, 8, 8, subsample=(4, 4), input_shape=input_shape))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 4, 4, subsample=(2, 2)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64, 3, 3, subsample=(1, 1)))
image_model.add(Activation('relu'))
image_model.add(Flatten())
image_model.add(Dense(512))
image_model.add(Activation('relu'))


value_model = Sequential()
value_model.add(Flatten(input_shape=values))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))

merged = Concatenate([image_model, value_model])

final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(nb_actions, activation='linear'))

关于python - 如何使用图像和单独的值作为输入来训练 Keras 模型?混合输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892061/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com