그래서 문제를 해결하기 위해 노력하고 있습니다. 나는 로봇이 몰고 간 지형 패치의 약 200k 64x64x3 RGB 이미지를 가지고있다. 각 패치에는 해당 이미지 패치의 거친 정도에 해당하는 레이블이 있습니다. 조도 값의 범위는 0-160입니다. 데이터는 다양한 속도로 움직이는 로봇과 함께 수집되어 러프 니스 값의 범위를가집니다. 내 목표는 패치의 거칠기를 예측할 수있게하는 것입니다. VGG-16 네트워크를 사용 중입니다. 마지막 레이어는 회귀를 위해 수정되었습니다. 내 배치 크기는 1024이고, 손실은 평균 sqaured 오류이며, 최적화는 rmsprop입니다. 네트워크는 아래와 같습니다. 내 문제는 훈련 후에 네트워크가 각 테스트 이미지에 대해 정확히 동일한 값을 예측한다는 것입니다. 주목해야 할 또 다른 포인트는 훈련 손실이 홀수 인 검증 손실보다 항상 높다는 것입니다. 마지막으로 다양한 배치 크기뿐 아니라 SGD 및 Adam과 같은 다른 최적화 도구를 사용해 보았습니다. 지금 나는 처음부터 네트워크를 훈련하려고 노력하고 있지만 너무 유망하지는 않습니다. 나는 여기서 무엇이 잘못되고 있는지 잘 모르며, 내가 얻을 수있는 도움에 정말로 감사 할 것입니다. 감사합니다CNN 회귀 분석은 각 테스트 이미지에 대해 동일한 값을 예측합니다.
if input_tensor is None:
img_input = Input(shape=input_shape)
else:
if not K.is_keras_tensor(input_tensor):
img_input = Input(tensor=input_tensor, shape=input_shape)
else:
img_input = input_tensor
# Block 1
x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(img_input)
x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)
# Block 2
x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)
x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)
# Block 3
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)
# Block 4
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)
# Block 5
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x)
x = Flatten(name='flatten')(x)
x = Dense(4096, activation='relu', name='fc1')(x)
x = Dense(4096, activation='relu', name='fc2')(x)
x = Dense(1,name='regression_dense')(x)