【发布时间】:2018-04-04 03:51:59
【问题描述】:
我正在为我的自主直升机构建强化学习代理。我用于纯图像输入的 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'))
Merge API of Keras 在我的理解中是为了合并图像和图像。如何将这些不同类型的输入组合在一起?
编辑:这是我对我的意思的尝试。我想在每个时间步用一张图像和一个单独的值训练我的代理。由于我认为我不应该在 conv 网络流中将单独的值与图像一起传递,所以我希望有第二个值流,然后将图像和值网络最终结合在一起。
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, subsample=(4, 4), activation='relu')(img_input)
样式不起作用。
另外我不知道如何在actions = Dense(nb_actions, activation='linear')(img)(value) 中整合流
【问题讨论】:
标签: python image-processing keras deep-learning reinforcement-learning