자율 헬리콥터에 대한 보강 학습 에이전트를 구축 중입니다. 순수한 이미지 입력에 대한 나의 Keras (1.0.7) 모델은 다음과 같습니다이미지가있는 Keras 모델을 훈련시키고 입력 값을 분리하는 방법은 무엇입니까? 혼합 입력
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 네트워크 스트림에서 이미지와 함께 별도의 값을 전달해서는 안된다 고 생각하기 때문에 값의 두 번째 스트림을 가져온 다음 이미지와 값 네트워크를 함께 가져 오려고합니다.
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)
사실, Model 클래스 API가 필요한 것입니다. 예제 코드는 하나의 입력과 두 개의 출력을 설명합니다. 이것을 2 개의 입력 (이미지와 분리 된 상태 값)과 하나의 출력 (nb_actions)에 적용 할 것입니다. –
편집을 참조하십시오. –