# 합성곱 신경망 주요 과정 요약
1. 데이터셋 로드 및 전처리
MNIST, CIFAR-10, 그리고 notMNIST라는 이미지 데이터셋을 사용
- MNIST: 28x28 픽셀의 손글씨 숫자 이미지로 구성된 데이터셋
- CIFAR-10: 32x32 픽셀의 컬러 이미지로 구성된 데이터셋으로, 10개의 다양한 물체를 포함
- notMNIST: A부터 J까지 알파벳의 이미지를 포함한 데이터셋
데이터셋을 불러온 후, 이미지를 신경망에 넣기 위해 4차원 배열로 변환(예: (60000, 28, 28, 1)). 또한, 숫자 레이블(예: 0~9)을 원-핫 인코딩으로 변환하여 신경망이 예측할 수 있도록 함
2. CNN (Convolutional Neural Network) 모델 구성
코드는 Convolutional Neural Network(CNN) 모델을 구성하는 방법을 보여줍니다. CNN은 이미지 데이터를 처리하는 데 매우 효과적인 딥러닝 모델입니다.
- Conv2D 레이어: 이미지를 처리하기 위해 필터를 적용하여 특징을 추출합니다. 필터는 작은 크기의 윈도우로 이미지를 스캔하며, 각 필터는 특정한 특징(예: 가장자리, 질감 등)을 감지합니다.
- MaxPooling 레이어: 필터로 추출한 특징 맵을 축소하여 연산량을 줄이고, 중요한 특징만 남기도록 도와줍니다. 이 레이어는 각 구역에서 가장 큰 값만을 남겨 픽셀 수를 줄입니다.
- Flatten 레이어: 다차원 배열(이미지)을 1차원 배열로 펼쳐, Dense 레이어에 입력할 수 있도록 변환합니다.
- Dense 레이어: 이미지의 특징을 바탕으로 학습하여 최종적으로 예측을 수행합니다. 예를 들어, 숫자 이미지가 주어지면, 0~9 중 어떤 숫자인지 예측합니다.
3. 모델 컴파일 및 학습
모델이 구성된 후, 컴파일을 통해 학습에 필요한 손실 함수와 성능 지표를 설정
여기서는 categorical_crossentropy라는 손실 함수를 사용하여 모델이 예측한 결과와 실제 값 사이의 차이를 계산 metrics=['accuracy']는 모델이 얼마나 정확하게 예측하는지를 측정
모델 학습은 fit 함수를 사용해 데이터를 모델에 입력하고, 여러 번(epochs) 학습하면서 모델의 성능을 개선해 나감
4. 모델 평가 및 요약
학습이 끝나면, 모델의 성능을 평가하고 결과를 확인
model.summary()를 통해 모델의 구조와 각 레이어의 출력 형태 및 파라미터 수를 요약
5. 난수 생성 및 데이터 샘플링
난수 생성은 머신러닝에서 데이터 샘플링, 초기화 작업 등에 많이 사용
- np.random.rand(): 0과 1 사이의 랜덤한 실수를 생성
- np.random.randint(): 지정한 범위 내에서 랜덤한 정수를 생성
- np.random.shuffle(): 배열의 순서를 랜덤하게 섞음
6. 데이터 저장 및 불러오기
- np.save()와 np.load()를 사용하여 배열 데이터를 .npy 파일로 저장하고 불러올 수 있음
- np.savetxt()와 np.loadtxt()를 사용하면 배열을 텍스트 파일로 저장하고 다시 불러올 수 있음
이 모든 과정은 딥러닝 모델이 데이터를 학습하고, 예측 결과를 개선하는 데 필수적인 요소들.
CNN은 특히 이미지 인식 분야에서 탁월한 성능을 보이고 있다고 함
#상세 분석
1. 데이터셋 로드 및 전처리
MNIST 데이터셋 로드
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
print(독립.shape, 종속.shape) # (60000, 28, 28) (60000,)
- MNIST 데이터셋: 손글씨 숫자(0~9)의 이미지 데이터셋
- 독립은 입력 이미지, 종속은 해당 이미지의 실제 숫자 레이블을 의미
- 독립.shape는 (60000, 28, 28)로, 60,000개의 28x28 픽셀 크기의 이미지가 있음
- 종속.shape는 (60000,)로, 60,000개의 레이블(0~9)이 있음
데이터 전처리: 이미지 형태 변경
독립 = 독립.reshape(60000, 28, 28, 1) # 3차원으로 변환
- CNN은 4차원 텐서를 입력으로 받음
- 그래서 (60000, 28, 28, 1)로 변환,1은 흑백 이미지를 나타내는 채널
- 이 과정을 통해 이미지 데이터는 CNN이 처리할 수 있는 형태로 변환
데이터 전처리: 레이블 원-핫 인코딩
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape) # (60000, 28, 28, 1) (60000, 10)
- 원-핫 인코딩: 레이블을 이진 벡터로 변환
- 예를 들어, 숫자 3은 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]로 변환
- 종속.shape이 (60000, 10)인 이유는 10개의 숫자(0~9) 중 하나를 나타내기 때문
2. CNN 모델 구성
입력 레이어
X = tf.keras.layers.Input(shape=[28, 28, 1])
- Input 레이어: 모델에 들어가는 입력 데이터를 정의
- 여기서는 28x28 크기의 흑백 이미지를 입력으로 받음
Convolutional 레이어
H = tf.keras.layers.Conv2D(3, kernel_size=5, activation='swish')(X)
H = tf.keras.layers.Conv2D(6, kernel_size=5, activation='swish')(H)
- Conv2D 레이어: 이미지에서 특징을 추출
- 각 레이어는 kernel_size=5로 5x5 크기의 필터를 사용하여 이미지를 스캔
- 필터: 입력 이미지에서 특정 패턴을 찾음 예를 들어, 첫 번째 레이어에서는 3개의 필터를 사용하여 3개의 특징 맵을 생성
- 활성화 함수(Swish): 뉴런이 활성화되는 정도를 결정합니다. Swish 함수는 ReLU와 같이 비선형성을 부여해 신경망의 표현력을 높임
Flatten 레이어
H = tf.keras.layers.Flatten()(H)
- Flatten 레이어: 2D 형태의 특징 맵을 1D 벡터로 변환하여 Dense 레이어에 전달할 수 있게 해줌
- 예를 들어, Conv2D를 통과한 데이터가 (None, 20, 20, 6)이라면, 이를 (None, 2400) 형태의 1D 벡터로 변환함
Dense 레이어
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
- Dense 레이어: Fully Connected 레이어로, Flatten된 특징들을 조합해 최종 예측을 수행함
- 첫 번째 Dense 레이어는 84개의 뉴런을 가지고,
- 두 번째 Dense 레이어는 10개의 뉴런으로 구성되어 있음(10개의 클래스를 예측).
- Softmax: 출력층에서 사용되며, 각 클래스에 속할 확률을 반환
- 결과적으로 10개의 숫자 중 가장 높은 확률을 가진 클래스를 예측
3. 모델 컴파일 및 학습
모델 컴파일
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
- 모델 컴파일: 학습을 위한 설정을 정의함
- Loss 함수: categorical_crossentropy는 다중 클래스 분류 문제에서 사용되는 손실 함수로, 모델이 예측한 값과 실제 레이블 간의 차이를 계산
- Accuracy: 학습과 평가 시 모델의 성능을 측정하기 위한 지표로 사용
모델 학습
model.fit(독립, 종속, epochs=10)
- fit 함수: 주어진 데이터(독립, 종속)로 모델을 학습시킴
- epochs=10은 데이터를 10번 반복 학습
- 학습 과정: 모델은 epochs 동안 데이터를 통해 가중치를 조정하며 점점 더 좋은 예측을 할 수 있게 됨
4. 모델 평가 및 예측
모델 예측
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)
- predict 함수: 학습된 모델로 새로운 데이터를 예측함. 여기서는 처음 5개의 이미지를 사용해 예측
- 결과 확인: 예측된 결과는 확률 값으로 반환되며, 각 클래스에 속할 확률이 나타남
5. MaxPooling을 이용한 CNN 개선
MaxPooling 레이어 추가
H = tf.keras.layers.MaxPool2D()(H)
- MaxPooling 레이어: 필터링된 이미지를 축소하여 중요한 정보를 유지하면서 연산량을 줄임
- 각 구역에서 가장 큰 값만을 남겨 픽셀 수를 줄임
- 예를 들어, 2x2 영역에서 가장 큰 값을 선택해 Pooling을 수행
- 이를 통해 특징 맵의 크기를 줄이고, 모델의 복잡도를 낮추면서도 중요한 정보는 유지할 수 있음
6. CIFAR-10 데이터셋을 이용한 LeNet-5 모델
CIFAR-10 데이터셋 로드
(독립, 종속), _ = tf.keras.datasets.cifar10.load_data()
print(독립.shape, 종속.shape) # (50000, 32, 32, 3) (50000, 1)
- CIFAR-10 데이터셋: 32x32 크기의 컬러 이미지로 구성된 데이터셋
- 독립은 이미지 데이터, 종속은 해당 이미지의 레이블
LeNet-5 모델 구성
CNN 모델로, 주로 손글씨 숫자 인식을 위해 설계
여기서는 CIFAR-10 데이터셋에 맞춰 LeNet-5 모델을 구성
X = tf.keras.layers.Input(shape=[32, 32, 3])
H = tf.keras.layers.Conv2D(6, kernel_size=5, activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)
H = tf.keras.layers.Conv2D(16, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)
H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(120, activation='swish')(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
- Conv2D & MaxPooling: 이미지의 중요한 특징을 추출하고 축소하는 과정을 반복
- Flatten & Dense: 최종적으로 특징을 1D 벡터로 펼쳐 완전 연결층(Dense)에서 예측을 수행
7. 데이터 샘플링과 난수 생성
난수 생성
- np.random.rand(): 0과 1 사이의 균일 분포를 따르는 난수를 생성
- np.random.randint(): 특정 범위 내에서 랜덤한 정수를 생성 np.random.randint(1, 10)은 1과 9 사이의 정수를 랜덤하게 생성
- np.random.shuffle(): 주어진 배열의 순서를 랜덤하게 섞음
- np.random.permutation(): 원본 배열을 유지하면서 섞인 배열을 반환
8. 데이터 저장 및 불러오기
배열 데이터 저장
- np.savez(): 여러 배열을 하나의 .npz 파일에 저장
- np.savetxt(): 데이터를 텍스트 형식(예: CSV 파일)으로 저장
배열 데이터 불러오기
독립 = np.load('data.npy')
data = np.load('data.npz')
print(data['독립'].shape, data['종속'].shape)
- np.load(): 저장된 .npy 또는 .npz 파일을 불러옴
#컨볼루션 신경망(CNN, Convolutional Neural Network)
1. 필터와 컨볼루션
- 필터: CNN에서 필터는 특정 패턴이나 특징을 추출하는 역할을 합니다. 필터는 작은 행렬(예: 3x3, 5x5 등)로, 입력 이미지에 대해 슬라이딩하며 부분적으로 곱셈과 합산을 통해 새로운 출력을 생성합니다.
- 컨볼루션: 필터를 이미지 위에서 이동시키면서 연산을 수행하는 과정입니다. 각 위치에서 필터와 이미지의 해당 부분을 곱한 후 더해줍니다. 이 과정을 통해 새로운 특성 맵이 생성됩니다.
2. 스트라이드(Strides)와 패딩(Padding)
- 스트라이드: 필터가 이미지를 이동하는 거리입니다.
- 스트라이드가 1이면 필터가 한 칸씩 이동하고, 스트라이드가 2면 두 칸씩 이동합니다.
- 스트라이드가 클수록 출력 특성 맵의 크기가 줄어듭니다.
- 패딩: 필터를 적용하기 전에 이미지 가장자리에 공백을 추가하는 방법입니다. 패딩은 이미지의 크기를 유지하거나 줄이는 데 사용됩니다. 예를 들어, '제로 패딩'은 0으로 채워넣는 방식입니다.
3. 맥스 풀링(Max Pooling)
- 맥스 풀링: 컨볼루션 연산 후에 가장 큰 값을 추출하는 연산입니다. 이는 특성 맵의 크기를 줄이고, 중요한 특징만 남기는 데 사용됩니다. 예를 들어 2x2 영역에서 가장 큰 값만을 선택해 크기를 줄입니다.
4. Reshape과 3차원 데이터
- 3차원 데이터: CNN에서는 이미지를 처리할 때, 색상 채널(RGB)로 인해 데이터가 3차원이 됩니다. 컨볼루션 레이어 이후에는 3차원 데이터가 2차원으로 줄어들 수 있으므로, 이를 다시 변환(Reshape)하여 평탄화할 필요가 있습니다.
5. 시그모이드 함수와 손실 함수
- 시그모이드 함수: 시그모이드는 출력값을 0과 1 사이로 변환하는 활성화 함수
- 이 함수는 주로 이진 분류 문제에 사용
- 손실 함수: 모델이 예측한 값과 실제 값 사이의 차이를 측정하는 함수입니다.
- 모델이 학습할 때 이 손실 값을 최소화하려고 노력
6. 기타 개념들
- GAN(Generative Adversarial Network): GAN은 두 개의 네트워크(생성자와 판별자)가 서로 경쟁하며 학습하는 모델입니다. 필터를 사용하여 이미지를 생성하는 등 다양한 응용이 가능합니다.
- **Hexadecimal (16진수)**와 Octal (8진수): 16진수는 색상 표현에 자주 사용되고, 8진수는 컴퓨터에서의 특정 데이터 표현에 사용됩니다.
이제 전체적으로 보면, CNN은 이미지나 비디오 데이터를 처리하는 데 강력한 도구로, 필터를 통해 특징을 추출하고, 이를 기반으로 모델을 학습시킵니다. 맥스 풀링 등을 사용해 데이터를 효율적으로 줄이고, 최종적으로 손실 함수를 통해 모델의 정확도를 개선합니다.
# ML에서 사용되는 함수
1. 손실 함수 (Loss Function)
- 역할: 모델이 예측한 값과 실제 값의 차이를 측정하는 데 사용됩니다. 손실 함수는 이 차이를 줄이기 위해 모델의 파라미터를 조정하는 데 중요한 역할을 합니다.
- 종류:
- 평균 제곱 오차 (Mean Squared Error, MSE): 회귀 문제에서 자주 사용되는 손실 함수로, 예측 값과 실제 값의 차이의 제곱의 평균을 계산합니다.
- 교차 엔트로피 (Cross-Entropy Loss): 분류 문제에서 자주 사용되며, 예측 확률과 실제 레이블 간의 차이를 계산합니다.
- 헝잉 로스 (Hinge Loss): SVM에서 사용하는 손실 함수로, 잘못 분류된 예에 대해 패널티를 부여합니다.
2. 활성화 함수 (Activation Function)
- 역할: 신경망의 각 뉴런에서 입력 신호를 출력 신호로 변환할 때 사용됩니다. 비선형성을 도입하여 복잡한 문제를 해결할 수 있도록 합니다.
- 종류:
- 시그모이드 (Sigmoid): 출력값을 0과 1 사이로 변환하여 이진 분류 문제에 자주 사용됩니다.
- ReLU (Rectified Linear Unit): 음수를 0으로 변환하고, 양수는 그대로 반환하여 계산을 단순화하고 학습을 빠르게 합니다.
- 소프트맥스 (Softmax): 다중 클래스 분류 문제에서 각 클래스에 속할 확률을 출력하는 함수입니다.
3. 평가 함수 (Evaluation Function)
- 역할: 학습된 모델의 성능을 평가하기 위해 사용
- 모델이 얼마나 정확하게 예측하는지를 측정하는 지표
- 종류:
- 정확도 (Accuracy): 전체 예측 중에서 맞춘 비율을 계산
- 정밀도와 재현율 (Precision and Recall): 분류 문제에서 양성으로 예측한 것 중에서 실제로 양성인 비율(정밀도)과 실제 양성 중에서 올바르게 예측한 비율(재현율)을 계산.
- F1 점수 (F1 Score): 정밀도와 재현율의 조화 평균으로, 불균형한 데이터셋에서 자주 사용됩니다.
- R^2 점수 (R-squared): 회귀 모델의 성능을 평가하는 지표로, 예측값이 실제 값과 얼마나 일치하는지를 나타냅니다.
4. 최적화 함수 (Optimization Function)
- 역할: 손실 함수를 최소화하여 모델의 파라미터를 조정하는 데 사용됩니다. 하강법과 같은 방법이 여기에 포함됩니다.
- 종류:
- 경사 하강법 (Gradient Descent): 손실 함수의 기울기를 따라 최솟값을 찾는 알고리즘으로, 모델의 파라미터를 조정합니다.
- 아담 (Adam): 경사 하강법의 변형으로, 학습 속도와 안정성이 높아 자주 사용됩니다.
- 모멘텀 (Momentum): 경사 하강법에서 진동을 줄이기 위해 기울기의 과거 누적 값을 반영합니다.
5. 정규화 함수 (Regularization Function)
- 역할: 모델이 과적합(Overfitting)되는 것을 방지하기 위해 모델의 복잡도를 제한합니다.
- 종류:
- L1 정규화 (Lasso): 일부 가중치를 0으로 만들어 특성 선택 효과를 줍니다.
- L2 정규화 (Ridge): 가중치의 크기를 줄여 모델의 복잡도를 낮춥니다.
- 드롭아웃 (Dropout): 학습 중 일부 뉴런을 무작위로 제거하여 과적합을 방지합니다.
6. 거리 함수 (Distance Function)
- 역할: 데이터 포인트 간의 유사성 또는 차이를 측정하는 데 사용됩니다. 특히 클러스터링이나 최근접 이웃 알고리즘에서 중요합니다.
- 종류:
- 유클리드 거리 (Euclidean Distance): 두 점 사이의 직선 거리를 계산합니다.
- 맨해튼 거리 (Manhattan Distance): 축을 따라 이동한 거리의 합을 계산합니다.
- 코사인 유사도 (Cosine Similarity): 두 벡터 간의 각도를 기반으로 유사성을 측정합니다.
7. 스케일링 및 정규화 함수 (Scaling and Normalization Function)
- 역할: 데이터의 크기나 분포를 조정하여 모델 학습에 적합하게 만듭니다.
- 종류:
- 표준화 (Standardization): 데이터의 평균을 0, 표준 편차를 1로 조정합니다.
- 정규화 (Normalization): 데이터의 값을 0과 1 사이의 범위로 조정합니다.
- 최대 절대값 스케일링 (MaxAbs Scaling): 데이터의 절대값이 0과 1 사이가 되도록 조정합니다.
8. 모델 평가를 위한 교차 검증 함수 (Cross-Validation Function)
- 역할: 모델의 성능을 평가하기 위해 데이터를 여러 번 나누어 학습과 검증을 반복하는 방법입니다.
- 종류:
- k-겹 교차 검증 (k-Fold Cross-Validation): 데이터를 k개의 부분으로 나누어,
- 각 부분이 한 번씩 검증 세트로 사용되도록 학습을 반복합니다.
- 홀드아웃 (Holdout): 데이터를 학습 세트와 검증 세트로 나누어 평가하는 방법입니다.
이 함수들은 머신 러닝 모델을 구축하고 평가하며, 모델의 성능을 개선하는 데 핵심적인 역할을 하므로. 다양한 함수들이 서로 조합되어 복잡한 문제를 해결하는 데 사용됩니다.
#넘파이 난수
NumPy 난수 생성 개요
numpy.random 모듈은 다양한 확률 분포에 따른 난수를 생성하는 기능을 제공합니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다:
- 균일 분포에서 난수 생성
- 정규 분포에서 난수 생성
- 이산 분포에서 난수 생성
- 배열의 요소 섞기 및 임의 표본 추출
- 난수 시드(seed) 설정을 통한 재현성 확보
다양한 확률 분포에서 난수를 생성할 수 있습니다.
1. 이항 분포 (Binomial Distribution):
# 성공 확률 0.5, 시행 횟수 10인 이항 분포 난수 생성
binomial_random = rng.binomial(n=10, p=0.5)
print(binomial_random) # 예시 출력: 6
2. 포아송 분포 (Poisson Distribution):
# 평균 발생률이 3인 포아송 분포 난수 생성
poisson_random = rng.poisson(lam=3) print(poisson_random) # 예시 출력: 2
3. 베타 분포 (Beta Distribution):
# a=0.5, b=0.5인 베타 분포 난수 생성
beta_random = rng.beta(a=0.5, b=0.5)
print(beta_random)
# 예시 출력: 0.834...
설명:
- rng.binomial(n, p, size) : n번의 시행에서 성공 확률이 p인 이항 분포에서 난수 생성
- rng.poisson(lam, size) : 평균 발생률이 lam인 포아송 분포에서 난수 생성
- rng.beta(a, b, size) : 모수 a, b를 가진 베타 분포에서 난수 생성
난수 생성기의 시드 설정
난수 생성기의 초기값을 설정하여 재현 가능한 결과를 얻을 수 있게 함
# 시드 설정
seed = 42 rng = np.random.default_rng(seed)
# 난수 생성 print(rng.random())
# 예시 출력: 0.7739560485559633
# 동일한 시드로 생성하면 동일한 결과
rng2 = np.random.default_rng(seed)
print(rng2.random())
# 출력: 0.7739560485559633
설명:
- 동일한 시드를 사용하면 항상 동일한 순서의 난수생성
- 이를 통해 실험 결과를 재현하거나, 디버깅을 용이하게 할 수 있음
추가 학습 자료:
# 넘파이 파일 불러오고 저장하기
np.save() 및 np.load()를 사용한 배열 저장 및 불러오기
- np.save(): 배열을 .npy 파일 형식으로 저장함. 이 형식은 바이너리(binary) 형식으로, 저장된 데이터를 그대로 불러올 수 있어 효율적
- np.load(): 저장된 .npy 파일을 불러옴
import numpy as np # 배열 생성
arr = np.array([1, 2, 3, 4, 5])
# 배열을 .npy 파일로 저장
np.save('my_array.npy', arr)
# .npy 파일에서 배열 불러오기
loaded_arr = np.load('my_array.npy')
print(loaded_arr) # 출력: [1 2 3 4 5]
np.savetxt() 및 np.loadtxt()를 사용한 텍스트 파일로 저장 및 불러오기
- np.savetxt(): 배열을 텍스트 파일로 저장합니다. 텍스트 파일에는 숫자들이 공백 또는 지정한 구분자로 저장됨
- np.loadtxt(): 텍스트 파일에서 배열을 불러옴
import numpy as np # 2D 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 배열을 텍스트 파일로 저장
np.savetxt('my_array.txt', arr, delimiter=',', fmt='%d')
# 텍스트 파일에서 배열 불러오기
loaded_arr = np.loadtxt('my_array.txt', delimiter=',')
print(loaded_arr)
# 출력: [[1. 2. 3.] [4. 5. 6.]]
여러 배열을 저장하기 위한 np.savez() 및 np.load() 사용
- np.savez(): 여러 개의 배열을 하나의 .npz 파일로 저장할 수 있음
- npz 파일은 압축된 형식으로, 여러 배열을 저장하는 데 유리함
- np.load(): .npz 파일에서 저장된 배열을 불러올 수 있음
import numpy as np # 배열 생성
arr1 = np.array([1, 2, 3])
arr2 = np.array([[4, 5, 6], [7, 8, 9]])
# 여러 배열을 .npz 파일로 저장
np.savez('my_arrays.npz', arr1=arr1, arr2=arr2)
# .npz 파일에서 배열 불러오기
loaded = np.load('my_arrays.npz')
print(loaded['arr1'])
# 출력: [1 2 3]
print(loaded['arr2'])
# 출력: [[4 5 6] [7 8 9]]
CSV 파일로 저장 및 불러오기
np.savetxt()와 np.loadtxt()를 사용하여 CSV 파일로 저장하고 불러올 수 있음
import numpy as np
# 2D 배열 생성 arr = np.array([[1, 2, 3], [4, 5, 6]])
# 배열을 CSV 파일로 저장
np.savetxt('my_array.csv', arr, delimiter=',')
# CSV 파일에서 배열 불러오기
loaded_arr = np.loadtxt('my_array.csv', delimiter=',')
print(loaded_arr)
# 출력: [[1. 2. 3.] [4. 5. 6.]]
요약
- np.save()/np.load(): 배열을 .npy 파일로 저장/불러오기 (바이너리 형식)
- np.savetxt()/np.loadtxt(): 배열을 텍스트 파일로 저장/불러오기 (텍스트 형식)
- np.savez(): 여러 배열을 .npz 파일로 저장 (압축된 바이너리 형식)
- CSV 파일로 저장 및 불러오기: np.savetxt()와 np.loadtxt()로 CSV 파일 처리
'ML DL' 카테고리의 다른 글
9.4 ML History / 과대적합 완화 / 모델저장 뒤 복원 / 콜백 / RELU (1) | 2024.09.04 |
---|---|
9.2 Tensorflow (0) | 2024.09.02 |
한국어 자연어 처리(NLP) (0) | 2024.08.29 |