코드 강좌

[파이썬, 딥러닝] 3차원상 물체의 이동경로를 학습하고 이후 경로를 예측하는 모델 예제와 해설

안요사님 2023. 5. 16. 16:03
728x90
반응형
import numpy as np
import tensorflow as tf
from tensorflow import keras

# 입력 데이터 생성
def generate_data(n_samples):
    X = np.random.random((n_samples, seq_length, 3))
    y = np.random.random((n_samples, 3))
    return X, y

seq_length = 10
n_samples = 1000

# 학습 데이터 생성
X_train, y_train = generate_data(n_samples)

# 모델 구성
model = keras.models.Sequential()
model.add(keras.layers.SimpleRNN(64, input_shape=(seq_length, 3), return_sequences=False))
model.add(keras.layers.Dense(3))
model.add(keras.layers.Reshape((1, 3)))  # 형상을 출력 데이터와 맞춤

# 모델 컴파일
optimizer = keras.optimizers.Adam()
model.compile(loss='mean_squared_error', optimizer=optimizer)

# 모델 학습
model.fit(X_train, y_train, epochs=10, batch_size=32)

# 예측 데이터 생성
X_test, _ = generate_data(1)

# 이동 경로 예측
predicted_trajectory = model.predict(X_test)

print("Predicted Trajectory:")
print(predicted_trajectory)

해당 예제 코드는 3차원 상의 물체의 이동 경로를 학습하고, 이후의 이동 경로를 예측하는 모델을 구성하는 방법을 보여줍니다. 코드는 TensorFlow와 Keras를 사용하여 구현되었습니다.

데이터 생성:
generate_data 함수를 사용하여 학습에 사용할 입력 데이터(X)와 출력 데이터(y)를 생성합니다.
입력 데이터는 shape가 (n_samples, seq_length, 3)인 3차원 배열로 구성되며, n_samples는 샘플의 수, seq_length는 시퀀스 길이, 3은 각 시퀀스 요소의 차원을 나타냅니다.
출력 데이터는 shape가 (n_samples, 3)인 2차원 배열로 구성되며, 각 샘플은 3차원 상에서의 좌표를 나타냅니다.


모델 구성:
Sequential 모델을 사용하여 모델을 구성합니다.
SimpleRNN 레이어를 추가하여 시퀀스 데이터를 처리합니다. 64는 뉴런의 수를 나타냅니다. input_shape은 입력 데이터의 형상을 지정합니다.
Dense 레이어를 추가하여 출력을 생성합니다. 3은 출력의 차원을 나타냅니다.
Reshape 레이어를 추가하여 출력 데이터의 형상을 (1, 3)으로 맞춥니다. 이는 출력 데이터와 예측 결과의 형상을 일치시키기 위해 필요한 조치입니다.


모델 컴파일:
mean_squared_error를 손실 함수로 사용하여 모델을 컴파일합니다.
Adam 옵티마이저를 선택하여 모델을 최적화합니다.
모델 학습:

fit 함수를 사용하여 모델을 학습합니다.
X_train과 y_train은 생성된 학습 데이터입니다.
epochs는 에포크 수를 나타내며, batch_size는 한 번에 처리되는 샘플의 수를 나타냅니다.


예측:
학습된 모델을 사용하여 이후의 이동 경로를 예측합니다.
generate_data 함수를 사용하여 하나의 테스트 데이터를 생성합니다.
predict 함수를 사용하여 예측된 이동 경로를 계산합니다.
결과 출력:

예측된 이동 경로를 출력합니다.
이 예제 코드를 실행하면 주어진 입력 데이터로 모델이 학습되고, 학습된 모델을 사용하여 이후의 이동 경로를 예측합니다.

 

학습된 모델은 이동 경로의 패턴을 학습하고, 새로운 입력 데이터에 대해 예측을 수행합니다. 예측된 이동 경로는 다음과 같은 형식으로 출력됩니다:

Predicted trajectory: [[x1, y1, z1], [x2, y2, z2], [x3, y3, z3], ...]


여기서 (x1, y1, z1)은 첫 번째 예측 지점의 좌표이고, (x2, y2, z2)는 두 번째 예측 지점의 좌표입니다. 이런식으로 이동 경로의 예측 지점들이 순차적으로 출력됩니다.

예를 들어, 다음과 같은 예측 결과가 나올 수 있습니다:

Predicted trajectory: [[0.785, 0.378, 0.672], [0.893, 0.432, 0.587], [0.921, 0.410, 0.620], ...]


이 결과는 주어진 입력 데이터 이후의 3차원 공간에서의 이동 경로를 예측한 것입니다. 예측된 좌표들은 시간의 흐름에 따라 차례대로 출력됩니다.

출력된 예측 결과는 실제로 예측된 이동 경로를 시각화하거나 추가적인 분석을 위해 사용될 수 있습니다.

728x90
반응형