私は自律型ヘリコプター用の強化学習エージェントを構築しています。私は純粋なイメージ(オリエンテーション、私の位置以外にも、私のモデルにいくつかの追加の値を渡す必要があり、適切に学ぶためにイメージでケラスモデルを訓練し、値を入力とする方法は?混合入力
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'))
:純粋な画像入力のための私のKeras(1.0.7)モデルは次のようになりますヘリコプターなど)。私は、1つの出力レイヤーまたは複数の出力レイヤーをもたらすネットワークアーキテクチャーのストリームにしなければならないと思います。
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は、わかっていればイメージとイメージをマージするためのものです。これらの異なるタイプのインプットをどのように集めるのですか?
編集:私のやりたいことに私の試み。私は1つのイメージと1つの別個の値で、各タイムステップでエージェントを訓練したい。私はコンバートネットワークストリームの画像と別の値を一緒に渡すべきではないと思うので、値の第2ストリームを持って、最後に画像と値のネットワークをまとめたいと思っています。
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)
スタイルは動作しません。
また、私はあなたがいないシーケンシャルなく、ModelクラスのAPIを使用する必要がありますことを行うためにはactions = Dense(nb_actions, activation='linear')(img)(value)
実際、ModelクラスAPIが必要です。あなたのサンプルコードは1つの入力と2つの出力を記述します。これを2つの入力(イメージと独立したステータス値)と1つの出力(nb_actions)に適合させます。 –
編集をご覧ください –