Anaconda Prompt 에서 jupyter notebook --generate-config 설정을 했음에도 사용자 지정 주피터 노트북 경로가 작동 안 될 때 아래 방법으로 간단 해결
1. Jupyter Notebook 아이콘에서 속성 열기
2. 대상(T)에서 %USERPROFILE% 삭제 후, 원하는 폴더 경로 입력.
3. 시작 위치(S) %HOMEPATH% 경로 제거
GPU가 2개인데, CPU 에서도 작업을 수행하게 해서 3개 작업을 동시에 분업시키는 방법
1. 듀얼 GPU 설정하는 방법은 아래 링크 참고.
2. 기본적으로 케라스가 GPU를 인식에서 이용하기 때문에, 아래 명령어를 추가해 주면 CPU를 사용한다.
import os
os.environ["CUDA_VISIBLE_DEVICES"] = ""
from keras import backend as K
with K.tf.device('/cpu:0'):
classifier = Sequential()
classifier.add(Dense(units = 13, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
따라서, GPU 2개 CPUs 1개 돌려서 총 3개의 작업을 동시에 할 수 있다.
여기서는 gpu_0와 gpu_1 두 개의 가상환경을 만든다.
각 가상환경(gpu_0, gpu_1)에서 아래 명령어 실행
python -m ipykernel install --user --name [가상환경 이름] --display-name "[커널이름]"
아래 그림 처럼,Kernal > Change kernel 에서 GPU_0, GPU_1 생성된 것을 확인
(gpu_0) jupyter kernerlspec uninstall gpu_0
각 가상 커널에서 GPU 사용할 GPU 번호를 지정해 준다.
아래 그림과 같이, 현재 GPU 전용 메모리는 둘 다 사용되지 않고 있음.
딥러닝 코드 실행
아래 그림 처럼, 각 GPU가 따로 돌아가는 것을 볼 수 있음.
본 예제에서는 아래 그림처럼 각자 4초 정도 시간이 소요되었다.
각각의 가상환경으로 설정하지 않거나 설정이 잘 못 된 경우, 계산 도중 예전 데이터를 Disk에 Overwrite 할 것인지 Reload 할 것인지 계속 묻는다. 이는 하나의 가상환경에서 두개의 GPU를 따로 지정해서는 분업이 이루어지지 않는 상태라는 말임.
딥러닝 TensorFlow-GPU 설정 방법은 아래 링크를 참조
한방에 99.9% 정확도, 오차<1% 나올리가 있나?
accuracy의 변동성이 있긴해도 99.9%...
좋아할 게 아니라, 상당히 의심스러운데
뭘 잘 못했는지 고민해봐야...
missing-data 를 너무 평균값으로 넣었나?
코드내용:
[0,1] 분류
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
>>> X_train.shape
(48456, 13)
>>> y_train.shape
(48456,)
>>> X_test.shape
(20767, 13)
>>> y_test.shape
(20767,)
>>> classifier.add(Dense(units = 13, activation = 'relu'))
>>> classifier.add(Dense(units = 1, activation = 'sigmoid'))
>>> classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
>>> classifier.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test))
결과:
>>> print("Best Accuracy on training set = ", max(history.history['accuracy'])*100)
Best Accuracy on training set = 99.94015097618103
>>> print("Best Accuracy on test set = ", max(history.history['val_accuracy'])*100)
Best Accuracy on test set = 99.99518394470215
>>> print("Loss on training set = ", max(history.history['loss']))
Loss on training set = 0.3780692219734192
>>> print("Loss on test set = ", max(history.history['val_loss']))
Loss on test set = 0.018711965531110764
아래 코드 실행
(base) python
>>> import tensorflow
>>> from tensorflow.python.client import device_lib
>>> print(device_lib.list_local_devices())
에러:
>>> df.loc[df['Vis'] <= 100, "flag"] = "1"
>>> df.loc[df['Vis'] > 100, "flag"] = "2"
>>> (중략)
>>> d = df.values
>>> (중략)
>>> history=classifier.fit(X_train, y_train, batch_size = 5, epochs = 300, validation_data=(X_test, y_test))
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float).
원인:
데이터가 float 뿐만 아니라 object가 섞여 있다.
numpy 는 오로지 숫자만 취급한다. pandas는 섞여 있어도 된다.
따라서, 데이터 전처리 시, 이미 df['Vis'] 를 0, 1로 바꾸고 number로 변환시킨 후, 데이터를 불러서 처리해야 한다.
해결:
아래와 같이 문장 수정 후 성공
>>> df.loc[df['Vis'] <= 100, "flag"] = pd.to_numeric(1)
>>> df.loc[df['Vis'] > 100, "flag"] = pd.to_numeric(0)
Vulcan wrfinput_d03 (plus 3day 1hr)
일요일: 오전 피크 없음.
토요일: 이른 아침 작은 피크 (금요일 야간 활동 영향)
시작을 2010년 5월 13일 (목) 으로 설정했으나, 요일이 맞지 않다. ==> 재작업!!!
아래는 vulcan 에서 3day 1hr 를 더한 경우 .
Feng's wrfchemi_d03
시작을 2011년 5월 1일 (일) 로 설정. 사실 2010년 5월1 (월) 로 해야 함.