알고리즘 트레이딩에서의 파이썬 - 페이지 22

 

1시간 만에 matplotlib로 데이터 시각화



1시간 만에 matplotlib로 데이터 시각화

이 비디오에서 강사는 기계 학습에서 데이터 시각화의 중요성을 소개하고 수집된 대량의 데이터를 이해하는 데 어떻게 도움이 될 수 있는지 설명합니다. 이 과정에서는 데이터 시각화를 위한 두 가지 기본 Python 라이브러리인 Matplotlib 및 Seaborn을 다룹니다.

강사는 이 과정이 주로 Python을 배우고자 하는 기계 학습 엔지니어, 데이터 엔지니어 및 데이터 과학자를 위해 설계되었다고 말합니다. Matplotlib의 사용법을 설명하기 위해 곡선을 그리는 간단한 예가 제공됩니다. Matplotlib의 철학은 기계 학습 모델을 구축하고 데이터를 처리하는 표준이 된 기존 언어인 Python을 활용하는 데 있습니다. Matplotlib를 다른 Python 패키지와 결합하여 사용자는 다양한 작업에 사용할 수 있는 수많은 패키지를 활용할 수 있습니다.

이 비디오는 과학적 컴퓨팅을 위해 Matplotlib와 함께 NumPy 패키지를 사용하는 것의 중요성을 강조합니다. Matplotlib은 NumPy 없이도 작동할 수 있지만 NumPy를 활용하면 시간과 노력을 크게 절약할 수 있습니다. NumPy는 강력한 다차원 배열 개체와 이를 조작하기 위한 기능을 제공합니다. NumPy를 사용하여 x 및 y 좌표를 계산하여 100개의 포인트가 있는 곡선을 생성하는 예가 비디오에서 시연됩니다. 이 접근 방식은 순수 Python을 사용하여 작업을 수행하는 것보다 훨씬 빠릅니다. 또한 비디오는 비교를 위해 동일한 그래프에 두 개의 곡선을 플로팅하고, Python 코드를 사용하여 데이터를 추출하고 구성하여 파일에서 데이터를 플로팅하고, 항목 대신 포인트를 선형 방식으로 플로팅하는 방법을 다룹니다.

이 자습서에서는 Matplotlib 라이브러리를 사용하여 다양한 유형의 막대 차트를 만드는 방법을 자세히 설명합니다. 각 막대의 x 좌표와 각 막대의 높이를 입력 매개변수로 사용하는 막대 차트 생성 전용 함수인 "막대"가 도입되었습니다. 선택적 매개 변수를 조정하여 사용자는 다양한 효과를 만들 수 있으며 "barh" 기능을 사용하여 가로 막대를 생성할 수도 있습니다. 이 자습서에서는 동일한 그래프에 여러 막대 차트를 플로팅하고 "막대" 함수의 특수 매개변수를 사용하여 누적 막대를 만드는 방법도 다룹니다. 또한 비디오는 "파이" 기능을 사용하여 파이 차트를 만드는 방법을 간략하게 다룹니다.

Matplotlib을 사용한 데이터 시각화에 사용되는 다양한 기능은 튜토리얼에서 설명합니다. 다루는 첫 번째 기능은 확률 분포를 그래픽으로 표현한 히스토그램입니다. 사용자가 데이터를 히스토그램으로 쉽게 플롯할 수 있도록 "hist" 기능과 해당 매개변수에 대해 설명합니다. 두 번째로 다루는 기능은 값 분포의 비교를 용이하게 하는 박스 플롯입니다. 이 비디오는 데이터 세트의 사분위수, 중앙값, 평균 및 통계량을 포함하여 박스 플롯의 구성 요소를 설명하고 "boxplot" 기능을 사용하여 구성 요소를 생성하는 방법을 보여줍니다. 마지막으로 이 자습서에서는 3중, 4중 또는 HTML 색상 이름을 사용하여 색상을 정의하고 곡선 플롯의 색상을 설정하는 것과 같이 다양한 색상과 스타일을 사용하여 플롯을 변경하는 방법을 다룹니다.

동영상은 계속해서 "색상" 매개변수를 사용하여 산점도, 막대 차트 및 원형 차트에 색상을 추가하는 방법을 설명합니다. 이 매개변수를 사용하면 사용자가 개별 도트 색상을 제어하거나 모든 도트의 공통 색상을 변경할 수 있습니다. 비디오는 또한 라이브러리를 모듈로 가져오기, 쉬운 코딩을 위한 별칭 사용 및 변수 표현을 명확히 하는 방법을 다룹니다. Matplotlib 및 Python의 거의 모든 기능에는 "pi" 함수 및 "show" 함수와 같은 함수가 포함된다는 점을 강조합니다.

다음으로 튜토리얼에서는 박스 플롯, 마커 및 선 모양을 생성할 때 사용자 지정 색 구성표와 선 패턴을 다룹니다. 미리 정의된 모양을 사용하여 사용자 지정 마커를 만들고 수학 텍스트 기호를 사용하여 사용자 지정 마커를 정의하는 방법을 보여줍니다. 또한 중앙 집중식 구성 개체를 사용하여 Matplotlib의 기본 설정을 쉽게 변경하는 방법을 설명하여 사용자가 다양한 사용 컨텍스트에 검정색 배경 및 흰색 주석을 갖는 것과 같은 시각적 스타일을 적용할 수 있도록 합니다.

발표자는 Matplotlib의 "savefig" 기능을 사용하여 그래프를 파일로 저장하는 방법을 설명합니다. 또한 제목, x 및 y축 레이블, 경계 상자 및 화살표를 포함하여 그래프에 주석을 추가하는 방법도 다룹니다. 비디오는 그래프의 시각적 명확성과 이해를 향상시키기 위해 이러한 주석을 추가하는 과정을 보여줍니다. 또한 정확한 조정을 위해 Matplotlib에서 눈금 간격을 수동으로 제어하는 방법을 보여줍니다. 이 비디오는 그래프에 주석을 달고 독자가 쉽게 이해할 수 있도록 하기 위해 Matplotlib에서 사용할 수 있는 다양한 기능을 강조합니다.

계속해서 강사는 Matplotlib를 사용한 데이터 시각화에 대해 논의하고 Matplotlib에 대한 고급 인터페이스인 Seaborn을 소개합니다. Seaborn은 Matplotlib와 비교하여 다른 매개변수와 기능을 제공합니다. 강사는 Seaborn의 내장 데이터 세트 및 컬러 맵을 사용하여 시각화를 생성하는 방법을 보여줍니다. 비디오는 요인 플롯을 생성하고 색상 맵을 사용하여 데이터를 플롯하는 예를 제시하는 것으로 마무리됩니다. 이러한 예를 통해 시청자는 Matplotlib 및 Seaborn의 다양한 기능과 도구를 사용하여 데이터 시각화 기술을 향상시키는 방법에 대한 통찰력을 얻습니다.

동영상은 Seaborn의 "set_context" 기능을 사용하여 플롯을 확장하는 방법을 설명합니다. 이 기능을 사용하면 플롯이 표시되는 컨텍스트에 따라 크기와 같은 플롯 요소를 제어할 수 있습니다. 그런 다음 Seaborn의 두 가지 유형의 함수인 축 수준 함수와 도형 수준 함수의 차이점을 명확히 합니다. 축 수준 함수는 축 수준에서 작동하고 축 개체를 반환하는 반면 그림 수준 함수는 의미 있는 방식으로 구성된 축을 포함하는 플롯을 만듭니다. 마지막으로 비디오는 Matplotlib axis subplots 개체를 사용하여 박스 플롯의 축 설정에 대한 지침을 제공합니다.

이 포괄적인 비디오 자습서는 Matplotlib 및 Seaborn을 사용한 데이터 시각화와 관련된 광범위한 주제를 다룹니다. 기계 학습에서 데이터 시각화의 중요성과 Matplotlib을 강력한 라이브러리로 사용하는 것으로 시작합니다. 곡선을 그리는 방법, 막대 차트를 만드는 방법, 히스토그램 및 상자 그림을 생성하는 방법, 색상, 마커 및 선 스타일을 사용자 지정하는 방법을 보여줍니다. 이 자습서에서는 그래프 저장, 주석 추가 및 눈금 간격 조작에 대해서도 다룹니다. 또한 자체 기능 세트를 갖춘 대체 시각화 도구로 Seaborn을 소개합니다. 이 자습서를 따르면 뷰어는 데이터 시각화 기술을 향상하고 이러한 강력한 Python 라이브러리를 사용하여 결과를 효과적으로 전달할 수 있습니다.

  • 00:00:00 강사가 데이터 시각화와 기계 학습에서의 중요성을 소개합니다. 그는 전 세계적으로 수집된 대량의 데이터를 이해할 필요성과 데이터 시각화가 이를 달성하는 데 어떻게 도움이 될 수 있는지 강조합니다. 이 과정에서는 Python에서 데이터 시각화를 위해 가장 널리 사용되는 두 가지 라이브러리인 Matplotlib 및 Seaborn을 다룹니다. 강사는 이 과정이 주로 Python을 배우고자 하는 기계 학습 엔지니어, 데이터 엔지니어 및 데이터 과학자를 대상으로 하며 Matplotlib을 사용하여 곡선을 그리는 간단한 예제를 제공한다고 설명합니다. Matplotlib의 기본 철학은 기계 학습 모델을 구축하고 데이터를 랭글링하기 위한 표준이 된 기존 언어인 Python을 활용하는 것입니다. 다양한 작업을 위한 수많은 Python용 패키지가 있으므로 Matplotlib를 다른 패키지와 결합하려면 Python 코드를 사용해야 합니다.

  • 00:05:00 비디오는 과학적 컴퓨팅을 위해 NumPy 패키지를 Matplotlib와 함께 사용하는 것의 중요성을 설명합니다. Matplotlib은 NumPy 없이도 작동할 수 있지만 NumPy를 사용하면 강력한 다차원 배열 개체와 이를 조작하는 기능을 제공하여 많은 시간과 노력을 절약할 수 있습니다. 비디오에는 NumPy를 사용하여 x 및 y 좌표를 계산하는 100개의 점으로 곡선을 생성하는 예제가 포함되어 있으며 이는 순수한 Python을 사용하여 작업을 수행하는 것보다 훨씬 빠릅니다. 또한 비디오는 비교를 위해 하나의 그래프에 두 개의 곡선을 플로팅하고 Python 코드를 사용하여 파일에서 데이터를 플로팅하여 데이터를 추출 및 구성하고 선형 방식으로 항목 대신 포인트를 플로팅하는 방법을 다룹니다.

  • 00:10:00 동영상 자습서에서는 Matplotlib 라이브러리를 사용하여 다양한 유형의 막대 차트를 만드는 방법을 다룹니다. 막대 함수는 막대 차트를 생성하는 전용 함수로 각 막대의 x 좌표와 각 막대의 높이를 입력 매개변수로 사용합니다. 선택적 매개 변수를 조정하여 다양한 효과를 만들 수 있으며 bar h 기능을 사용하여 가로 막대를 만들 수도 있습니다. 이 자습서에서는 동일한 차트에 여러 막대 차트를 그리는 방법과 막대 함수의 특수 매개 변수를 사용하여 누적 막대를 그리는 방법도 설명합니다. 마지막으로 튜토리얼에서는 파이 기능을 사용하여 파이 차트를 만드는 방법을 다룹니다.

  • 00:15:00 비디오 자습서는 matplotlib를 사용한 데이터 시각화에 사용되는 다양한 기능을 다룹니다. 다루는 첫 번째 함수는 확률 분포를 그래픽으로 표현한 히스토그램입니다. 히스토그램을 생성하기 위해 비디오는 히스트 기능과 사용자가 데이터를 쉽게 플롯할 수 있는 매개 변수를 설명합니다. 두 번째로 다루는 기능은 값의 분포를 쉽게 비교할 수 있는 박스 플롯입니다. 이 비디오는 데이터 세트의 사분위수, 중앙값, 평균 및 통계량을 포함한 상자 그림의 구조와 상자 그림 기능을 사용하여 이를 생성하는 방법을 설명합니다. 마지막으로 이 자습서에서는 3중선, 4중선, html 색상 이름을 사용하여 색상을 정의하고 곡선 플롯의 색상을 설정하는 것을 포함하여 다양한 색상과 스타일을 사용하여 플롯을 변경하는 방법을 다룹니다.

  • 00:20:00 비디오는 개별 점 색상을 제어하거나 모든 점의 공통 색상을 변경하기 위해 "색상" 매개변수를 사용하여 산점도, 막대 차트 및 원형 차트에 색상을 추가하는 방법을 다룹니다. 비디오는 또한 라이브러리를 모듈로 가져오는 방법, 더 쉬운 코딩을 위해 별칭을 사용하는 방법 및 변수가 나타내는 것을 설명합니다. 또한 시청자들은 matplotlib 및 Python의 거의 모든 것이 "pi" 함수 및 "show" 함수와 같은 함수를 포함한다는 사실을 상기하게 됩니다.

  • 00:25:00 박스 플롯, 마커 및 선 모양을 만들 때 사용자 정의 색 구성표 및 선 패턴에 대해 배웁니다. 또한 미리 정의된 모양을 사용하여 자체 마커를 만드는 방법과 수학 텍스트 기호를 사용하여 자체 마커를 정의하는 방법도 배웁니다. 또한 중앙 집중식 구성 개체를 사용하여 Matplotlib의 기본 설정을 쉽게 변경하여 다양한 사용 상황에 대해 검은색 배경과 흰색 주석을 사용할 수 있도록 하는 방법을 배웁니다.

  • 00:30:00 발표자는 Matplotlib의 "savefig" 기능을 사용하여 그래프를 파일로 저장하는 방법을 설명합니다. 또한 제목, x 및 y축 레이블, 경계 상자 및 화살표를 포함하여 그래프에 주석을 추가하는 방법을 다룹니다. 또한 Matplotlib에서 눈금 간격을 수동으로 제어하는 방법을 보여줍니다. 이 비디오는 그래프에 주석을 달고 독자가 쉽게 이해할 수 있도록 하기 위해 Matplotlib에서 사용할 수 있는 다양한 기능을 강조합니다.

  • 00:35:00 강사가 matplotlib를 사용한 데이터 시각화에 대해 설명하고 차트에 축 로케이터 및 그리드를 추가하는 방법을 보여줍니다. 그런 다음 비디오는 matplotlib에 대한 고급 인터페이스인 seaborn을 소개하는 것으로 이동합니다. 강사는 seaborn이 matplotlib와 다른 매개변수를 제공하는 방법을 설명하고 내장 데이터 세트와 Seaborn의 색상 맵을 사용하여 시각화를 생성하는 방법을 보여줍니다. 비디오는 요인 도표를 만들고 색상 맵을 사용하여 데이터를 도표화하는 예제로 끝납니다. 전반적으로 시청자는 matplotlib 및 seaborn의 다양한 기능과 도구를 사용하여 데이터 시각화 기술을 향상시키는 방법을 배울 수 있습니다.

  • 00:40:00 동영상은 Seaborn의 컨텍스트 설정 기능을 사용하여 플롯의 크기를 조정하는 방법을 설명합니다. 컨텍스트 설정 기능을 사용하면 플롯이 표시될 컨텍스트에 따라 크기와 같은 플롯 요소를 제어할 수 있습니다. 비디오는 Seaborn의 두 가지 유형의 기능인 축 레벨 기능과 그림 레벨 기능의 차이점을 설명합니다. 축 수준 함수는 축 수준에서 작동하고 축 객체를 반환하는 반면 그림 수준 함수는 의미 있는 방식으로 구성된 축을 포함하는 플롯을 만듭니다. 마지막으로 동영상은 matplotlib axis subplots 객체를 사용하여 박스 플롯의 축을 설정하는 방법을 설명합니다.
Data Visualization with matplotlib in 1 Hour
Data Visualization with matplotlib in 1 Hour
  • 2022.04.29
  • www.youtube.com
In this FREE course let's learn the basics of creating data visualizations with the grandfather of visualization libraries in Python, matplotlib.LogikBot - A...
 

Python, TensorFlow 및 Keras 자습서를 사용한 딥 러닝



Python, TensorFlow 및 Keras 자습서를 사용한 딥 러닝

모두에게 인사드립니다. TensorFlow를 사용한 딥 러닝 및 Python 업데이트와 새로운 Chaos 튜토리얼에 오신 것을 환영합니다. Python에서 기본 딥 러닝을 마지막으로 다룬 지 2년이 넘었고 이 기간 동안 상당한 발전이 있었습니다. 딥 러닝을 시작하고 딥 러닝 모델로 작업하는 것이 훨씬 더 간단하고 접근하기 쉬워졌습니다.

하위 수준의 TensorFlow 코드와 복잡한 세부 정보를 탐구하는 데 관심이 있다면 여전히 이전 비디오를 참조할 수 있습니다. 그러나 딥 러닝을 시작하려는 경우 TensorFlow 위에 있는 Chaos와 같은 사용자 친화적인 고급 API가 있으므로 더 이상 딥 러닝을 거칠 필요가 없습니다. 이러한 API는 딥 러닝에 대한 사전 지식 없이도 누구나 따라할 수 있도록 딥 러닝을 매우 간단하게 만듭니다.

이 자습서에서는 신경망을 빠르게 살펴보겠습니다. 시작하려면 신경망의 핵심 구성 요소를 이해해 봅시다. 신경망을 포함한 모든 기계 학습 모델의 주요 목표는 입력을 출력에 매핑하는 것입니다. 예를 들어 입력 X1, X2 및 X3이 주어지면 출력이 개 또는 고양이에 해당하는지 확인하는 것을 목표로 합니다. 이 경우 출력 레이어는 개 또는 고양이일 가능성을 나타내는 두 개의 뉴런으로 구성됩니다.

이 매핑을 달성하기 위해 각 입력 X1, X2 및 X3이 숨겨진 레이어의 뉴런에 연결되는 단일 숨겨진 레이어를 사용할 수 있습니다. 이러한 각 연결에는 연결된 고유한 가중치가 있습니다. 그러나 단일 숨겨진 레이어로 제한하면 입력과 출력 간의 관계가 선형이 됩니다. 복잡한 문제에서 흔히 발생하는 비선형 관계를 포착하려면 두 개 이상의 숨겨진 계층이 필요합니다. 두 개 이상의 숨겨진 레이어가 있는 신경망은 종종 심층 신경망이라고 합니다.

숨겨진 레이어를 하나 더 추가하여 이전 레이어와 완전히 연결해 보겠습니다. 레이어 간의 각 연결에는 고유한 가중치가 있습니다. 궁극적으로 출력은 출력 레이어에 대한 각 연결이 고유한 가중치를 갖는 최종 레이어에서 파생됩니다. 개별 뉴런 수준에서 뉴런은 입력 레이어 값(X1, X2, X3) 또는 다른 뉴런의 입력일 수 있는 입력을 수신합니다. 이러한 입력은 관련 가중치를 고려하여 합산됩니다. 또한 뉴런 발사 여부를 시뮬레이션하기 위해 활성화 기능이 적용됩니다. 일반적인 활성화 함수에는 0과 1 사이의 값을 반환하는 단계 함수 또는 시그모이드 함수가 포함됩니다. 신경망에서 출력 레이어는 각 클래스(개 또는 고양이)에 확률을 할당하는 시그모이드 활성화 함수를 활용합니다. 그런 다음 Arg max 함수를 사용하여 가장 높은 확률을 기반으로 예측 클래스를 결정합니다.

이제 신경망에 대한 기본적인 이해를 마쳤으니 TensorFlow를 사용하여 신경망을 구축해 보겠습니다. 먼저 "pip install --upgrade tensorflow" 명령을 실행하여 TensorFlow가 설치되어 있는지 확인합니다. TensorFlow를 "tf"로 가져오고 "tf.version"을 사용하여 현재 버전을 확인할 수 있습니다. 이 튜토리얼에서는 Python 3.6 이상이 권장되지만 TensorFlow는 향후 Python 3.7 이상 버전을 지원할 것으로 예상됩니다.

다음으로 작업할 데이터 세트를 가져옵니다. 우리는 0에서 9까지의 손으로 쓴 숫자의 28x28 이미지로 구성된 MNIST 데이터 세트를 활용할 것입니다. 이 이미지는 신경망에 입력되고 네트워크는 해당 숫자를 예측합니다. 데이터 세트를 학습 및 테스트 변수인 X_train, Y_train, X_test 및 Y_test로 분할합니다.

더 나은 성능을 보장하기 위해 데이터를 정규화합니다. 현재 이미지의 픽셀 값 범위는 0에서 255까지이므로 TF.keras.utils.normalize 함수를 사용하여 0에서 1 사이로 크기를 조정합니다.

모델을 구축하기 위해 TensorFlow에서 신경망을 만들고 교육하는 프로세스를 단순화하는 상위 수준 API Chaos를 사용합니다. Chaos는 레이어를 차례로 쌓을 수 있는 Sequential이라는 순차적 모델을 제공합니다.

다음은 Chaos를 사용하여 신경망 모델을 만드는 방법의 예입니다.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense

# Create a sequential model
model = Sequential()

# Add a flatten layer to convert the input into a 1D array
model.add(Flatten(input_shape=(28, 28)))

# Add a dense layer with 128 neurons and ReLU activation
model.add(Dense(128, activation='relu'))

# Add another dense layer with 10 neurons for the output and softmax activation
model.add(Dense(10, activation='softmax'))

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


위의 코드에서는 TensorFlow 및 Chaos에서 필요한 모듈을 가져옵니다. Sequential 모델을 만들고 add 메서드를 사용하여 레이어를 추가합니다. 첫 번째 레이어는 2D 입력(28x28 이미지)을 1D 배열로 변환하는 Flatten 레이어입니다. 그런 다음 128개의 뉴런과 ReLU 활성화가 포함된 조밀한 레이어를 추가합니다. 마지막으로 10개의 뉴런(10자리에 해당)과 softmax 활성화가 있는 출력 레이어를 추가합니다.

모델을 정의한 후 compile 메소드를 사용하여 컴파일합니다. 학습 중에 평가할 옵티마이저(이 경우 'adam'), 손실 함수(다중 클래스 분류의 경우 'sparse_categorical_crossentropy') 및 메트릭을 지정합니다.

이제 모델을 정의하고 컴파일했으므로 MNIST 데이터 세트에서 학습을 진행할 수 있습니다. 우리는 적합 방법을 사용하여 모델을 훈련할 것입니다.

# Train the model model.fit(X_train, Y_train, epochs= 10 , validation_data=(X_test, Y_test))

위의 코드에서 훈련 데이터(X_train 및 Y_train)를 훈련할 에포크 수와 함께 fit 메서드에 전달합니다. 또한 학습 중에 본 적이 없는 데이터에 대한 모델의 성능을 평가하기 위해 검증 데이터(X_test 및 Y_test)를 제공합니다.

모델을 학습한 후 예측 방법을 사용하여 예측할 수 있습니다.

# Make predictions predictions = model.predict(X_test)

위의 코드에서 테스트 데이터(X_test)를 predict 메서드에 전달하고 각 클래스에 대한 예측 확률을 반환합니다.

TensorFlow에서 Chaos를 사용하여 신경망을 구축하고 교육하는 방법에 대한 간략한 개요입니다. 다양한 계층, 활성화 함수, 최적화 프로그램 및 기타 매개변수를 추가로 탐색하여 모델을 사용자 지정할 수 있습니다.

신경망 구축 및 훈련과 관련된 추가 기술 및 개념.

  1. 정규화 기법:

    • 드롭아웃: 드롭아웃은 과적합을 방지하는 데 사용되는 정규화 기술입니다. 훈련 중 각 업데이트에서 입력 단위의 일부를 무작위로 0으로 설정하여 모델이 특정 기능 세트에 너무 많이 의존하지 않도록 합니다.

    • L1 및 L2 정규화: L1 및 L2 정규화는 네트워크에서 큰 가중치를 방지하기 위해 손실 함수에 페널티를 추가하는 데 사용되는 기술입니다. L1 정규화는 가중치의 절대값을 손실 함수에 추가하여 희소성을 장려하는 반면, L2 정규화는 손실 함수에 제곱 가중치를 추가하여 작은 가중치를 장려합니다.

  2. 고급 활성화 기능:

    • Leaky ReLU: Leaky ReLU는 음의 입력에 작은 기울기를 허용하여 "죽어가는 ReLU" 문제를 해결하는 활성화 함수입니다. 입력이 음수일 때 작은 음수 기울기를 도입하여 훈련 중에 뉴런이 죽는 것을 방지합니다.

    • ELU(Exponential Linear Unit): ELU는 음수 입력에 대한 출력을 평활화하여 활성화가 음수 값을 갖도록 하는 활성화 함수입니다. 신경망 학습을 개선하고 양수 값에 대한 편향을 줄이는 데 도움이 되는 것으로 나타났습니다.

    • Swish: Swish는 선형 함수와 시그모이드 함수 사이에 부드러운 보간을 수행하는 활성화 함수입니다. 특정 경우에 ReLU 및 시그모이드와 같은 다른 활성화 기능에 비해 더 나은 결과를 제공하는 것으로 나타났습니다.

  3. 전이 학습: 전이 학습은 사전 훈련된 모델을 활용하여 새로운 작업을 해결하거나 관련 작업에 대한 모델의 성능을 향상시키는 기술입니다. 처음부터 모델을 교육하는 대신 사전 교육된 모델을 시작점으로 사용하고 특정 작업 또는 데이터 세트에서 미세 조정할 수 있습니다. 이는 특정 작업에 대한 데이터가 제한되어 있을 때 특히 유용합니다.

  4. 하이퍼파라미터 튜닝: 하이퍼파라미터는 모델에서 학습되지 않지만 학습 속도, 배치 크기, 레이어 수 등과 같이 학습 프로세스에 영향을 미치는 파라미터입니다. 이러한 하이퍼파라미터를 튜닝하면 모델의 성능에 상당한 영향을 미칠 수 있습니다. 그리드 검색, 무작위 검색, 베이지안 최적화와 같은 기술을 사용하여 하이퍼 매개변수 공간을 체계적으로 검색하고 최상의 조합을 찾을 수 있습니다.

  5. 모델 평가: 모델의 성능을 평가하는 것은 효율성을 평가하는 데 중요합니다. 분류 작업에 대한 일반적인 평가 메트릭에는 정확도, 정밀도, 재현율, F1 점수 및 수신자 작동 특성 곡선(ROC AUC) 아래 영역이 포함됩니다. 당면한 문제와 데이터의 특성에 따라 적절한 지표를 선택하는 것이 중요합니다.

  6. 불균형 데이터 세트 처리: 불균형 데이터 세트는 클래스 분포가 동일하지 않을 때 발생하여 편향된 모델로 이어질 수 있습니다. 소수 클래스를 오버샘플링하거나 다수 클래스를 언더샘플링하거나 두 가지를 조합하여 사용하는 것과 같은 기술이 이 문제를 해결하는 데 도움이 될 수 있습니다. 또한 정밀도, 재현율 및 F1 점수와 같은 평가 메트릭을 활용하면 불균형 데이터 세트에서 모델의 성능을 더 잘 이해할 수 있습니다.

신경망 구축 및 훈련은 반복적인 과정임을 기억하십시오. 원하는 결과를 얻기 위한 실험, 미세 조정 및 지속적인 개선이 필요합니다.

Deep Learning with Python, TensorFlow, and Keras tutorial
Deep Learning with Python, TensorFlow, and Keras tutorial
  • 2018.08.11
  • www.youtube.com
An updated deep learning introduction using Python, TensorFlow, and Keras.Text-tutorial and notes: https://pythonprogramming.net/introduction-deep-learning-p...
 

자체 데이터 로드 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.2



자체 데이터 로드 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.2

Karros의 Python TensorFlow에 대한 딥 러닝 자습서 2부에 오신 것을 환영합니다. 이 자습서에서는 외부 데이터 세트를 로드하는 데 중점을 둘 것입니다. 구체적으로, 우리는 원래 Kaggle 챌린지였던 Microsoft의 고양이와 개 데이터 세트를 사용할 것입니다. 목표는 이미지에 고양이 또는 개가 포함되어 있는지 식별하도록 신경망을 훈련시키는 것입니다.

시작하려면 Microsoft에서 고양이와 개 데이터 세트를 다운로드하십시오. 데이터 세트를 다운로드하고 추출하면 "cat" 및 "dog"라는 두 개의 디렉토리가 표시됩니다. 이 디렉토리에는 각각 고양이와 강아지의 이미지가 포함되어 있습니다. 각 디렉터리에는 약 12,500개 정도의 상당한 수의 샘플이 있어야 모델 학습을 위한 충분한 예제를 제공할 수 있습니다.

이제 코딩 부분으로 넘어 갑시다. np로 numpy, plt로 matplotlib.pyplot, cv2로 OpenCV 등 여러 라이브러리를 가져와야 합니다. 이러한 라이브러리가 설치되어 있지 않으면 pip를 사용하여 설치할 수 있습니다.

다음으로 데이터 세트가 있는 데이터 디렉토리를 정의합니다. 그에 따라 데이터 세트의 경로를 지정할 수 있습니다. 또한 데이터 세트의 디렉터리와 일치하도록 범주를 "개" 및 "고양이"로 정의합니다.

OS 라이브러리를 사용하여 각 범주와 해당 이미지를 반복합니다. 각 이미지에 대해 cv2 라이브러리를 사용하여 회색조로 변환합니다. 우리는 이 특정 작업에서 고양이와 개를 구별하는 데 색상이 중요하지 않다고 믿기 때문에 회색조를 선택했습니다.

이미지를 시각화하기 위해 matplotlib.pyplot을 사용합니다. plt.imshow 및 그레이스케일 컬러 맵을 사용하여 예제 이미지를 표시합니다. 이 단계를 통해 이미지가 올바르게 로드되었는지 확인할 수 있습니다.

이미지를 확인한 후 균일한 모양으로 크기 조정을 진행합니다. 일관성을 보장하기 위해 50x50 픽셀과 같은 대상 크기를 결정해야 합니다. cv2.resize 함수를 사용하여 이미지 크기를 조정하고 크기 조정된 이미지 배열을 저장합니다.

이제 학습 데이터 세트를 생성합니다. "training_data"라는 빈 목록을 초기화하고 "create_training_data"라는 함수를 정의합니다. 이 함수 내에서 이미지를 반복하고 "카테고리" 목록의 카테고리 인덱스를 사용하여 숫자 레이블(개는 0, 고양이는 1)을 할당합니다.

각 이미지에 대해 선택한 대상 크기로 크기를 조정합니다. 크기 조정된 이미지 배열과 해당 레이블을 training_data 목록에 추가합니다. 또한 데이터 세트의 깨진 이미지와 관련된 잠재적인 예외도 처리합니다.

교육 데이터 세트를 만든 후에는 데이터의 균형을 확인해야 합니다. 이와 같은 이진 분류 작업에서는 각 클래스에 대해 동일한 수의 샘플(개 50%, 고양이 50%)이 있어야 합니다. 불균형한 데이터는 편향된 모델 예측으로 이어질 수 있습니다. 데이터가 불균형한 경우 훈련 중에 클래스 가중치를 사용하여 이 문제를 완화할 수 있습니다.

임의성을 보장하고 모델이 이미지 순서를 학습하지 못하도록 하기 위해 random.shuffle 함수를 사용하여 훈련 데이터를 섞습니다.

이제 데이터가 섞였으므로 기능(X) 및 레이블(Y)에 대한 변수로 데이터를 압축할 수 있습니다. X와 Y에 대한 빈 목록을 초기화하고 교육 데이터를 반복하여 각 목록에 기능과 레이블을 추가합니다. 마지막으로 X를 NumPy 배열로 변환하고 np.array와 각 기능의 모양을 사용하여 모양을 변경합니다.

이 시점에서 우리는 신경망 훈련을 위한 데이터를 준비했습니다. 이제 데이터를 교육 및 검증 세트로 분할하고, 모델을 구축하고, TensorFlow를 사용하여 교육하는 등의 추가 단계를 진행할 준비가 되었습니다.

Negative 1은 배열의 길이와 각 요소의 모양을 기준으로 크기를 자동으로 계산하는 자리 표시자입니다. 따라서 이 경우에는 (-1, image_size, image_size)의 모양을 갖도록 X 배열의 모양을 변경합니다. 이렇게 하면 데이터가 신경망에 공급할 올바른 형식이 됩니다.

다음으로 이미지의 픽셀 값을 정규화해야 합니다. 현재 픽셀 값의 범위는 그레이스케일의 강도를 나타내는 0에서 255까지입니다. 신경망은 일반적으로 입력 데이터가 정규화될 때 더 잘 수행됩니다. 즉, 값이 더 작은 범위로 조정됩니다. 픽셀 값을 255.0으로 나누면 0과 1.0 사이에서 크기가 조정됩니다. 이는 다음 코드를 사용하여 수행할 수 있습니다.

x = x / 255.0

이제 사전 처리된 데이터가 있으므로 TensorFlow를 사용하여 딥 러닝 모델을 구축할 수 있습니다.
Loading in your own data - Deep Learning basics with Python, TensorFlow and Keras p.2
Loading in your own data - Deep Learning basics with Python, TensorFlow and Keras p.2
  • 2018.08.18
  • www.youtube.com
Welcome to a tutorial where we'll be discussing how to load in our own outside datasets, which comes with all sorts of challenges!First, we need a dataset. L...
 

Convolutional Neural Networks - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.3



Convolutional Neural Networks - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.3

여러분 안녕하세요. Python, TensorFlow 및 Keras 튜토리얼 시리즈의 3부에 오신 것을 환영합니다. 이 비디오에서는 CNN(컨볼루션 신경망)과 이전 비디오에서 구축한 데이터 세트를 사용하여 개와 고양이를 분류하는 데 적용하는 방법에 중점을 둘 것입니다.

CNN에 대해 알아보기 전에 작동 방식과 이미지 데이터에 유용한 이유를 빠르게 살펴보겠습니다. CNN에는 컨볼루션, 풀링, 추가 컨볼루션 및 풀링 등 여러 단계가 포함됩니다. 컨볼루션의 기본 아이디어는 이미지에서 유용한 기능을 추출하는 것입니다. 일반적으로 행렬(예: 3x3)로 표시되는 컨벌루션 창을 사용하여 이미지를 스캔하고 창 내의 정보를 단일 값으로 단순화합니다. 그런 다음 창이 이동하고 이 프로세스를 여러 번 반복합니다. 창이 움직이는 정도를 결정하는 보폭도 조정할 수 있습니다.

Keras를 사용하면 창 크기를 지정할 수 있으며 대부분의 다른 세부 사항은 자동으로 처리됩니다. 딥 러닝의 복잡성에 대해 더 깊이 파고들고 싶다면 특히 원시 TensorFlow 코드에 대한 내부 작업이 더 자세히 설명되어 있는 "Practical Machine Learning" 튜토리얼 시리즈를 확인하는 것이 좋습니다.

컨벌루션 레이어의 출력은 이미지에서 추출된 특징 세트입니다. 그런 다음 이러한 기능은 일반적으로 풀링 계층을 통해 전달되며 가장 일반적인 유형은 최대 풀링입니다. 최대 풀링은 창 내에서 최대값을 선택하고 이를 반복적으로 이동하여 데이터를 효과적으로 다운샘플링합니다.

CNN의 상위 수준 아이디어는 네트워크에 더 깊이 들어갈수록 이미지에서 점차 더 복잡한 기능을 추출한다는 것입니다. 초기 레이어는 가장자리와 선을 식별할 수 있는 반면 더 깊은 레이어는 원이나 사각형과 같은 더 복잡한 모양을 인식할 수 있습니다. 결국 네트워크는 특정 개체나 패턴을 식별하는 방법을 학습할 수 있습니다.

CNN을 구현하려면 필요한 라이브러리를 가져와야 합니다. Sequential, Dense, Dropout, Activation, Conv2D 및 MaxPooling2D와 같이 사용할 TensorFlow 및 Keras 모듈을 가져옵니다. 또한 피클을 가져와 데이터 세트를 로드합니다.

데이터를 신경망에 공급하기 전에 정규화를 고려해야 합니다. 우리의 경우 픽셀 값의 범위가 0에서 255까지이므로 픽셀 데이터를 255로 나누어 스케일링할 수 있습니다. 또는 더 복잡한 정규화 시나리오를 위해 chaos.utils의 정규화 기능을 사용할 수 있습니다.

다음으로 Sequential API를 사용하여 모델 구축을 시작합니다. 64개의 단위와 3x3 창 크기의 Conv2D 레이어를 추가합니다. input_shape는 X.shape를 사용하여 동적으로 설정됩니다. 그런 다음 수정된 선형 활성화 함수(ReLU)를 사용하여 활성화 계층을 추가합니다. 그런 다음 2x2 창 크기의 최대 풀링 계층을 추가합니다.

다른 Conv2D 레이어와 해당 최대 풀링 레이어를 추가하여 이 프로세스를 반복합니다. 이 시점에서 2D 컨볼루션 신경망이 있습니다.

추출된 특징을 완전히 연결된 레이어로 전달하려면 데이터를 평면화해야 합니다. 64개의 노드가 있는 최종 Dense 레이어를 추가하기 전에 Flatten 레이어를 추가합니다. 마지막으로 단일 노드가 있는 출력 레이어를 추가하고 범주형 또는 이진형이 될 수 있는 활성화 함수를 지정합니다.

손실 함수(범주형 또는 이진 교차 엔트로피), 옵티마이저(예: Adam) 및 모델의 성능을 평가하는 메트릭(예: 정확도)을 지정하여 모델을 컴파일합니다.

모델을 교육하기 위해 입력 데이터 X와 레이블 Y를 전달하는 적합 방법을 사용합니다. 배치 크기(예: 32)를 지정할 수도 있습니다.

다음 코드를 사용하여 모델을 교육합니다.

model.fit(X, Y, batch_size= 32 , validation_split= 0.1 )

이 코드는 입력 데이터 X와 해당 레이블 Y를 사용하여 모델을 교육합니다. 배치 크기를 32로 설정했습니다. 이는 모델이 교육 중에 한 번에 32개의 샘플을 처리함을 의미합니다. validation_split 매개변수는 0.1로 설정되며, 이는 모델을 교육하는 동안 데이터의 10%가 유효성 검사에 사용됨을 의미합니다.

모델이 훈련되면 테스트 데이터를 사용하여 성능을 평가할 수 있습니다. 다음 코드를 사용하여 모델을 평가할 수 있습니다.

model.evaluate(X_test, Y_test)

여기서 X_test와 Y_test는 각각 테스트 데이터와 레이블을 나타냅니다. 이 코드는 테스트 데이터에 대한 모델의 손실 값과 정확도를 반환합니다.

모델을 평가한 후 이를 사용하여 보이지 않는 새로운 데이터를 예측할 수 있습니다. 우리는 새로운 데이터에 대한 예측 레이블을 얻기 위해 predict() 함수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

predictions = model.predict(X_new)

이 코드는 새 데이터 X_new에 대한 예측을 생성합니다. 예측은 각 클래스에 대한 확률이며 argmax() 함수를 사용하여 확률이 가장 높은 클래스를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

predicted_labels = np.argmax(predictions, axis= 1 )

이 코드는 확률이 가장 높은 클래스를 새 데이터의 각 샘플에 대한 예측 레이블로 할당합니다.

그게 다야! 이제 컨볼루션 신경망 모델을 훈련하여 개와 고양이를 분류하고 이를 사용하여 새 데이터를 예측했습니다. 필요한 경우 나중에 사용할 수 있도록 훈련된 모델을 저장하는 것을 잊지 마십시오.

Convolutional Neural Networks - Deep Learning basics with Python, TensorFlow and Keras p.3
Convolutional Neural Networks - Deep Learning basics with Python, TensorFlow and Keras p.3
  • 2018.08.19
  • www.youtube.com
Welcome to a tutorial where we'll be discussing Convolutional Neural Networks (Convnets and CNNs), using one to classify dogs and cats with the dataset we bu...
 

TensorBoard로 모델 분석 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.4



TensorBoard로 모델 분석 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.4

"Python을 사용한 딥 러닝: TensorFlow 및 Keras" 자습서 시리즈의 4부에 오신 것을 환영합니다. 이 비디오와 다음 비디오에서는 TensorBoard를 사용하여 모델을 분석하고 최적화하는 방법에 대해 논의할 것입니다. TensorBoard는 시간 경과에 따른 모델 학습을 시각화할 수 있는 강력한 도구입니다. 주요 목적은 정확도, 유효성 검사 정확도, 손실 및 유효성 검사 손실과 같은 모델 성능의 다양한 측면을 이해하는 데 도움을 주는 것입니다. 또한 TensorBoard에는 향후 자습서에서 살펴볼 수 있는 고급 기능이 있습니다.

TensorBoard에 들어가기 전에 사소한 세부 사항을 살펴보겠습니다. 이 튜토리얼에서 중요하지는 않지만 작은 모델도 상당한 양의 GPU 메모리를 소비하는 경향이 있음을 지적하고 싶습니다. 여러 모델을 동시에 실행하려는 경우 각 모델이 사용해야 하는 GPU 메모리의 일부를 지정할 수 있습니다. 이렇게 하면 여러 모델을 실행하거나 메모리 제약 조건이 발생할 때 잠재적인 문제를 피할 수 있습니다. 예를 들어 저는 일반적으로 GPU 메모리의 1/3을 사용하도록 모델을 설정합니다. 이 접근 방식은 객체 감지 및 자율 주행과 관련된 "Python Plays GTA" 시리즈와 같이 여러 모델을 동시에 실행할 때 유용한 것으로 입증되었습니다. 시간과 골칫거리를 줄일 수 있는 유용한 팁일 뿐입니다.

이제 본론으로 넘어가겠습니다. 가장 먼저 해결하고 싶은 것은 dense 레이어 뒤에 활성화 함수를 추가하는 것입니다. 처음에 포함하지 않은 것은 내 실수였습니다. 활성화 함수를 추가하는 것은 필수적입니다. 활성화 함수가 없으면 Dense 레이어가 선형 활성화 함수가 되어 우리의 목적에 적합하지 않기 때문입니다. 우리는 회귀를 피하고 모델이 최적의 성능을 발휘하도록 하고 싶습니다. 따라서 조밀한 계층 앞에 활성화 함수를 삽입하여 신속하게 수정하겠습니다.

이렇게 수정하면 정확도가 크게 향상되는 것을 관찰할 수 있습니다. 모델이 훈련되는 동안 잠시 시간을 내어 TensorFlow 설명서를 살펴보고 사용 가능한 다양한 Keras 콜백에 대해 알아봅시다. 우리의 경우 TensorBoard 콜백을 사용하여 TensorBoard와 인터페이스할 것입니다. 그러나 특정 매개변수를 기반으로 한 조기 중지, 학습 속도 스케줄링 및 모델 체크포인트와 같은 다른 유용한 콜백이 있다는 점은 주목할 가치가 있습니다. 모델 검사점은 최상의 손실 또는 유효성 검사 정확도와 같이 특정 간격으로 모델을 저장하려는 경우에 특히 유용합니다. 지금은 TensorBoard 콜백에 초점을 맞추겠습니다. 하지만 향후 비디오에서 다른 콜백에 대해 간략히 다루겠습니다.

TensorBoard 콜백을 사용하려면 TensorFlow의 Keras 콜백 모듈에서 가져와야 합니다. 다음 코드 줄을 추가하여 TensorBoard를 가져옵니다.

from tensorflow.keras.callbacks import TensorBoard

이제 필요한 모듈을 가져왔으므로 몇 가지 정리 작업을 수행해 보겠습니다. 특히 여러 모델로 작업할 때 모델에 의미 있는 이름을 지정하는 것이 좋습니다. 이 경우 "cats_vs_dogs_CNN_64x2"와 같은 모델 이름을 지정할 수 있습니다. 또한 고유성을 보장하기 위해 이름에 타임스탬프를 추가해 보겠습니다. 타임스탬프를 포함하면 모델을 재훈련하거나 모델 버전과의 혼동을 피할 때 유용합니다. 따라서 코드 시작 부분에서 다음과 같이 모델 이름과 타임스탬프를 정의하겠습니다.

import time model_name = f"cats_vs_dogs_CNN_64x2_ { int (time.time())} "

이제 고유한 모델 이름이 있으므로 TensorBoard 콜백 개체를 만들 수 있습니다. 다음 코드를 사용하여 TensorBoard 객체를 tensorboard_callback이라는 변수에 할당합니다.

tensorboard_callback = TensorBoard(log_dir= f"logs/ {model_name} " )

여기서는 log_dir 매개변수를 사용하여 TensorBoard의 로그 디렉토리를 지정합니다. 앞에서 정의한 모델 이름을 사용하여 로그 디렉터리 경로의 형식을 지정합니다.

또한 텐서 보드를 사용하면 교육 프로세스의 시각화를 제공하여 모델을 분석하고 최적화할 수 있습니다. 주로 정확도, 유효성 검사 정확도, 손실 및 유효성 검사 손실과 같은 메트릭에 중점을 둡니다. 이러한 메트릭은 시간이 지남에 따라 모델의 성능을 이해하고 개선이 필요한 영역을 식별하는 데 도움이 됩니다. 정확도와 손실은 일반적으로 모니터링되지만 텐서 보드는 향후 탐색할 수 있는 고급 기능을 제공합니다.

텐서 보드 사용을 시작하려면 먼저 코드에 약간의 추가 작업을 수행해야 합니다. 이 자습서에서 중요하지는 않지만 언급할 가치가 있습니다. 몇 줄의 코드를 추가하면 모델에 GPU 메모리의 특정 부분을 할당할 수 있습니다. 이는 여러 모델을 동시에 실행하거나 VRAM에 문제가 발생할 때 유용합니다. 이를 통해 GPU 할당을 제어하고 잠재적 충돌이나 메모리 오버플로를 방지할 수 있습니다. 우리의 경우 모델에 GPU의 1/3을 할당합니다. 이것은 원활한 실행을 보장하고 다른 모델이나 프로젝트와 작업할 때 충돌을 방지합니다.

계속해서 텐서 보드 구현에 집중하겠습니다. 먼저 필요한 종속 항목을 가져와야 합니다. "tensorflow.keras.callbacks" 패키지에서 "tensorboard" 모듈을 가져옵니다. 이 모듈은 텐서 보드에 대한 콜백 기능을 제공합니다.

다음으로 모델에 의미 있는 이름을 지정하려고 합니다. 여러 모델로 작업할 때 각 모델에 고유한 이름을 지정하는 것이 필수적입니다. 실험을 추적하고 혼란을 피하는 데 도움이 됩니다. 이 경우 모델 이름을 "cat's_first_dog_CNN_64x2_good_enough"로 지정합니다. 또한 현재 시간 값을 사용하여 이름에 타임스탬프를 추가합니다. 이렇게 하면 고유성이 보장되고 실수로 모델을 덮어쓰는 것을 방지할 수 있습니다.

모델의 이름을 지정한 후 텐서 보드 콜백 개체를 정의할 수 있습니다. "TensorBoard" 클래스의 인스턴스를 생성하고 변수 "tensorboard"에 할당합니다. 생성자에 로그 디렉토리 경로를 전달합니다. 로그 디렉토리는 텐서 보드가 모델과 관련된 로그 및 데이터를 저장하는 곳입니다. 문자열 형식을 사용하여 로그 디렉터리 경로에 모델 이름을 포함합니다.

콜백 개체가 준비되면 모델 교육 프로세스에 통합할 수 있습니다. 모델의 "fit" 메서드에서 콜백 개체를 "callbacks" 매개 변수에 목록으로 전달합니다. 이 경우 텐서 보드 콜백인 하나의 콜백만 있습니다. 그러나 필요한 경우 목록에 여러 콜백을 포함할 수 있다는 점은 주목할 가치가 있습니다.

콜백이 통합되었으므로 이제 모델을 교육할 수 있습니다. 이 예에서는 에포크 수를 10으로 설정했습니다. 그러나 요구 사항에 따라 에포크 수를 자유롭게 조정하십시오. 모델이 훈련됨에 따라 텐서 보드는 지정된 메트릭을 기반으로 로그 및 시각화 생성을 시작합니다.

작동 중인 텐서 보드를 보려면 명령 창이나 터미널을 열고 로그 파일이 포함된 디렉터리로 이동해야 합니다. 올바른 디렉토리에 있으면 명령 프롬프트에 "tensorboard --logdir logs"를 입력하여 텐서 보드 명령을 실행합니다. 이 명령은 텐서 보드 서버를 시작하고 텐서 보드 인터페이스에 액세스할 수 있는 로컬 URL을 제공합니다.

Tensor Board를 시작한 후 웹 브라우저를 열고 명령 프롬프트에서 제공하는 URL을 입력할 수 있습니다. 그러면 모델의 학습 진행 상황을 시각화할 수 있는 텐서 보드 인터페이스가 표시됩니다. 인터페이스는 샘플 내 정확도, 샘플 내 손실, 샘플 외 정확도 및 샘플 외 손실을 포함한 다양한 그래프를 보여줍니다. 이러한 지표를 분석하여 모델의 성능을 모니터링하고 최적화와 관련하여 정보에 입각한 결정을 내립니다.

그래프를 관찰함으로써 모델 동작의 패턴과 경향을 식별할 수 있습니다. 예를 들어 검증 정확도가 일정하게 유지되거나 감소하는 동안 검증 손실이 증가하기 시작하면 과적합을 나타냅니다. 반면에 유효성 검사 정확도와 손실이 모두 시간이 지남에 따라 개선되면 모델이 효과적으로 학습하고 있음을 나타냅니다.

Tensor 보드는 모델을 분석하고 최적화하기 위한 강력한 플랫폼을 제공합니다. 시각화는 교육 과정에 대한 귀중한 통찰력을 제공하고 의사 결정을 용이하게 합니다. 텐서 보드를 활용하여 모델 개발 프로세스를 간소화하고 더 나은 결과를 얻을 수 있습니다.

이 자습서 시리즈의 다음 부분에서는 히스토그램, 분포 및 임베딩을 포함하여 텐서 보드의 고급 기능에 대해 자세히 살펴보겠습니다. 이러한 기능은 더욱 세분성을 제공하고 모델을 보다 포괄적으로 이해할 수 있도록 합니다. 이러한 흥미로운 기능을 살펴보는 다음 비디오를 기대해 주십시오.

이것이 이 튜토리얼의 전부입니다. 시청해주셔서 감사하고, 다음 영상에서 만나요!

Analyzing Models with TensorBoard - Deep Learning with Python, TensorFlow and Keras p.4
Analyzing Models with TensorBoard - Deep Learning with Python, TensorFlow and Keras p.4
  • 2018.08.24
  • www.youtube.com
Welcome to part 4 of the deep learning basics with Python, TensorFlow, and Keras tutorial series. In this part, what we're going to be talking about is Tenso...
 

TensorBoard로 최적화 - Python, TensorFlow 및 Keras를 통한 딥 러닝 p.5



TensorBoard로 최적화 - Python, TensorFlow 및 Keras를 통한 딥 러닝 p.5

안녕하세요. Python TensorBoard 및 Keras 튜토리얼 시리즈를 사용한 딥 러닝 파트 5에 오신 것을 환영합니다. 이 자습서에서는 TensorBoard에 초점을 맞추고 이를 사용하여 다양한 모델 시도를 시각화하여 모델을 최적화하는 방법에 대해 설명합니다. 그것에 뛰어 들자!

먼저 모델을 분석하고 성능을 개선하기 위해 조정할 수 있는 측면을 식별해 보겠습니다. 현재 모델이 약 79%의 정확도를 달성했지만 더 잘할 수 있다고 믿습니다. 최적화를 위한 몇 가지 가능한 영역에는 옵티마이저, 학습률, 밀집 계층 수, 계층당 단위, 활성화 단위, 커널 크기, 보폭, 감쇠율 등이 포함됩니다. 탐색할 수 있는 다양한 옵션을 통해 수천 개의 모델을 테스트하게 될 수 있습니다. 그럼 어디서부터 시작해야 할까요?

일을 더 쉽게 하기 위해 가장 간단한 수정부터 시작하겠습니다. 레이어 수, 레이어당 노드, 마지막에 dense 레이어를 포함할지 여부를 조정하는 데 중점을 둘 것입니다. 고밀도 레이어의 수는 0, 1 또는 2를 고려합니다. 레이어 크기와 관련하여 32, 64 및 128 값을 사용합니다. 이 값은 단지 규칙일 뿐이며 기본 설정에 따라 다른 값을 선택할 수 있습니다.

이제 코드에서 이러한 변경 사항을 구현해 보겠습니다. 고밀도 레이어 수 및 레이어 크기와 같이 원하는 선택에 대한 몇 가지 변수를 정의합니다. 이러한 변수를 반복하여 다양한 모델 조합을 생성합니다. 또한 구성을 반영하는 각 모델의 이름을 만듭니다.

모델 구성이 있으면 코드에 적용할 수 있습니다. 입력 모양, 컨볼루션 레이어, 밀집 레이어 및 출력 레이어를 고려하여 그에 따라 모델 구조를 업데이트합니다. 또한 레이어 크기가 적절하게 조정되었는지 확인합니다.

모든 변경 사항이 적용되면 이제 코드를 실행할 차례입니다. 그러나 수많은 모델을 훈련시키는 것은 시간이 많이 걸릴 수 있으므로 이미 코드를 실행하고 결과를 저장했습니다. TensorBoard를 사용하여 결과를 분석해 보겠습니다.

TensorBoard 로그를 로드하고 다양한 모델 조합을 관찰합니다. 모델은 성능, 특히 유효성 검사 손실을 기반으로 구성됩니다. 가장 성능이 좋은 모델에 초점을 맞추고 해당 구성을 기록합니다.

결과에서 3개의 컨볼루션 레이어와 0개의 밀집 레이어가 있는 모델이 일관되게 잘 수행된다는 것이 분명해졌습니다. 레이어당 특정 노드 수는 덜 중요해 보입니다. 그러나 512개 또는 256개 노드와 같이 밀도가 더 큰 레이어가 더 나은 결과를 얻을 수 있다는 점은 주목할 가치가 있습니다. 이를 확인하기 위해 다양한 고밀도 레이어 크기를 테스트할 수 있습니다.

요약하면 TensorBoard를 사용하여 다양한 모델 구성을 탐색하는 것으로 시작했습니다. 우리는 3개의 컨볼루션 레이어가 있고 밀집 레이어가 없는 모델이 일관되게 잘 수행된다는 것을 발견했습니다. 또한 레이어당 노드 수가 더 최적화될 수 있음을 확인했습니다. 다양한 고밀도 레이어 크기를 테스트함으로써 잠재적으로 모델의 정확도를 더욱 향상시킬 수 있습니다.

이것은 단지 시작점일 뿐이며 모델을 최적화하기 위해 조정할 수 있는 다른 많은 측면이 있다는 것을 명심하십시오. TensorBoard는 이러한 모델 변형을 시각화하고 분석하기 위한 유용한 도구를 제공하여 모델 개선을 위한 현명한 결정을 내리는 데 도움을 줍니다.

Optimizing with TensorBoard - Deep Learning w/ Python, TensorFlow & Keras p.5
Optimizing with TensorBoard - Deep Learning w/ Python, TensorFlow & Keras p.5
  • 2018.08.25
  • www.youtube.com
Welcome to part 5 of the Deep learning with Python, TensorFlow and Keras tutorial series. In the previous tutorial, we introduced TensorBoard, which is an ap...
 

훈련된 모델을 사용하는 방법 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.6



훈련된 모델을 사용하는 방법 - Python, TensorFlow 및 Keras를 사용한 딥 러닝 기본 사항 p.6

TensorFlow 및 Keras 튜토리얼 시리즈를 사용한 Python 딥 러닝 파트 6에 오신 것을 환영합니다!

이 동영상에서는 학습된 모델을 사용하여 새 이미지를 예측하는 방법에 대해 설명합니다. 많은 사람들이 데이터 세트를 성공적으로 훈련하고 테스트했지만 외부 이미지를 예측하기 위해 모델을 사용하는 방법을 확신하지 못하기 때문에 이에 대해 질문해 왔습니다. 그래서 그것에 뛰어 들자!

먼저 필요한 라이브러리를 가져와야 합니다. 이미지 처리를 위해 cv2를 가져오고 모델 작업을 위해 TF로 tensorflow를 가져옵니다. 훈련 중에 사용한 클래스 레이블 "개" 및 "고양이"를 포함하는 범주 목록도 필요합니다.

다음으로 파일 경로를 매개 변수로 사용하는 prepare라는 함수를 정의합니다. 이 함수는 입력 이미지에 필요한 전처리 단계를 처리합니다. 이미지를 특정 크기로 조정하고 회색조로 변환합니다. 그러면 이미지가 재구성된 numpy 배열로 반환됩니다.

그런 다음 TF.keras.models.load_model() 함수를 사용하여 훈련된 모델을 로드합니다. 이전에는 모델을 "64 x 3 CNN 모델"로 저장했으므로 동일한 이름을 사용하여 로드합니다.

이제 예측할 준비가 되었습니다. 우리는 예측이라는 변수를 정의하고 준비된 이미지에서 model.predict()를 호출한 결과를 할당합니다. 단일 이미지에서 예측하는 경우에도 predict() 메서드는 목록을 입력으로 예상한다는 점에 유의해야 합니다. 따라서 준비된 이미지를 목록으로 전달해야 합니다.

예측 결과가 나오면 출력할 수 있습니다. 그러나 예측은 현재 중첩 목록 형식입니다. 읽기 쉽도록 예측 값을 정수로 변환하고 인덱스로 사용하여 범주 목록에서 해당 클래스 레이블을 검색할 수 있습니다.

마지막으로 이미지가 개 또는 고양이로 분류되는지 나타내는 예측 클래스 레이블을 인쇄할 수 있습니다.

이 튜토리얼에서는 모델을 테스트하기 위해 두 개의 외부 이미지를 사용했습니다. 하나는 부끄러운 원뿔이 있는 개 이미지이고 다른 하나는 알 수 없는 생물입니다. 이러한 이미지는 교육 데이터 세트의 일부가 아니므로 본 적이 없는 데이터에 대한 예측을 할 수 있습니다.

자신의 개와 고양이 이미지로 시도하려면 코드에 설명된 단계를 따르세요. 정확도는 다를 수 있지만 평균적으로 약 80%여야 합니다.

지금은 여기까지입니다! 최근 스폰서인 Michael, Nick, Rodrigo, Papasan E에게 감사의 말씀을 전하고 싶습니다. 귀하의 지원에 감사드립니다. 향후 자습서에 대한 질문, 의견 또는 제안이 있으면 아래에 남겨주세요. 또한 순환 신경망을 사용하기 위한 아이디어에 열려 있으므로 간단한 데이터 세트를 염두에 두고 있다면 알려주세요.

순환 신경망을 살펴보는 다음 튜토리얼에서 뵙겠습니다. 그때까지 행복한 코딩하세요!

How to use your trained model - Deep Learning basics with Python, TensorFlow and Keras p.6
How to use your trained model - Deep Learning basics with Python, TensorFlow and Keras p.6
  • 2018.08.31
  • www.youtube.com
In this part, we're going to cover how to actually use your model. We will us our cats vs dogs neural network that we've been perfecting.Text tutorial and sa...
 

순환 신경망(RNN) - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.7


순환 신경망(RNN) - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.7

여러분 안녕하세요. Chaos 튜토리얼 시리즈에서 Python TensorFlow를 사용한 딥 러닝 파트 7에 오신 것을 환영합니다. 이 부분에서는 순환 신경망(RNN)에 초점을 맞출 것입니다. RNN의 목적은 데이터 순서의 의미와 중요성을 포착하는 것입니다. 이는 데이터가 시간적으로 구성되는 시계열 데이터와 문장의 단어 순서가 의미를 전달하는 자연어 처리와 특히 관련이 있습니다.

개념을 설명하기 위해 "Some people made a neural network"라는 문장의 예를 살펴보겠습니다. 이 문장이 일반적으로 데이터를 개별 단어로 분할하여 토큰화하는 심층 신경망에 의해 처리될 때 네트워크는 올바른 의미를 캡처하지 못할 수 있습니다. 예를 들어, "A neural network made some people"이라는 문장은 완전히 다른 의미를 가집니다. 이것은 문장의 의미를 결정하는 단어의 순서의 중요성을 강조합니다.

이제 순환 신경망의 작동 방식을 살펴보겠습니다. RNN의 기본 빌딩 블록은 종종 LSTM(Long Short-Term Memory) 셀을 사용하여 구현되는 순환 셀입니다. GRU(Gated Recurrent Unit)와 같은 다른 옵션이 있지만 LSTM 셀이 일반적으로 사용됩니다. RNN에서 각 셀은 순차 데이터를 입력으로 받아 다음 레이어 또는 반복 레이어의 다음 셀로 출력합니다.

셀의 출력은 다양한 방식으로 지시될 수 있습니다. 단방향 또는 양방향 방식으로 다음 레이어 또는 다음 셀로 이동할 수 있습니다. 이 튜토리얼에서는 기본 단방향 RNN에 중점을 둘 것입니다. 이를 설명하기 위해 반복 셀을 나타내는 녹색 상자를 상상해 보십시오. 이전 셀의 데이터가 현재 셀로 들어가 이전 노드에서 관련 없는 정보를 잊어버리고, 새로운 입력 데이터를 통합하고, 다음 레이어 또는 노드에 어떤 정보를 출력할지 결정하는 등의 작업을 수행합니다.

이 프로세스를 더 잘 시각화하기 위해 레이어의 특정 셀을 고려해 보겠습니다. 녹색 상자는 현재 셀을 나타냅니다. 데이터는 이전 셀에서 유입되어 랩핑되어 LSTM 셀로 들어갑니다. 셀 내에는 이전 노드의 정보를 잊어버리고, 새로운 입력 데이터를 통합하고, 다음 레이어 또는 노드로 전달할 출력을 결정하는 작업이 있습니다. 이러한 작업을 통해 LSTM 셀은 중요한 정보를 유지하고 후속 계층이나 노드로 전달할 수 있습니다.

RNN 구현은 특히 스칼라 값을 처리할 때 복잡할 수 있습니다. LSTM 셀의 작동 방식에 대한 자세한 설명에 관심이 있는 경우 심층적으로 설명하는 포괄적인 가이드를 확인하는 것이 좋습니다. 참조할 수 있도록 튜토리얼의 텍스트 버전에 이 가이드에 대한 링크를 포함시켰습니다.

이제 기본 순환 신경망 구축으로 이동하겠습니다. 이 자습서에서는 M-NIST 데이터 세트를 사용하는 간단한 예제로 시작합니다. 다음 자습서에서는 특히 암호 화폐 가격에 중점을 둔 보다 현실적인 시계열 데이터로 작업할 것입니다.

시작하려면 필요한 라이브러리를 가져오겠습니다. 우리는 TensorFlow를 tf로 가져오고, tensorflow.keras.models의 Sequential 모델, tensorflow.keras.layers의 Dense 레이어, Dropout 및 LSTM 셀을 가져올 것입니다. TensorFlow의 GPU 버전을 사용하는 경우 KU DNN LSTM 셀이라는 최적화된 LSTM 셀도 있습니다. 그러나 이 자습서에서는 일반 LSTM 셀을 사용합니다. TensorFlow의 CPU 버전을 사용하는 경우 계산에 상당한 시간이 걸릴 수 있습니다.

다음으로 데이터 세트를 로드해야 합니다. 이 예에서는 M-NIST 데이터 세트를 사용합니다. 학습 및 테스트 데이터를 반환하는 tf.keras.datasets.mnist.load_data() 함수를 사용하여 쉽게 로드할 수 있습니다. 데이터를 변수 X_train, Y_train, X_test 및 Y_test로 풀어보겠습니다.

먼저 각 픽셀 값을 255로 나누어 입력 데이터를 정규화하겠습니다. 이렇게 하면 픽셀 값이 신경망 훈련에 적합한 0과 1 사이의 범위로 조정됩니다. 학습 데이터와 테스트 데이터를 모두 255로 나누어 이를 달성할 수 있습니다.

X_train = X_train / 255.0 X_test = X_test / 255.0

다음으로 대상 레이블을 원-핫 인코딩된 벡터로 변환해야 합니다. M-NIST 데이터 세트에서 레이블은 숫자를 나타내는 0에서 9까지의 정수입니다. 원-핫 인코딩은 각 레이블을 길이 10의 이진 벡터로 변환합니다. 여기서 숫자에 해당하는 인덱스는 1로 설정되고 다른 모든 인덱스는 0으로 설정됩니다. tensorflow.keras.utils의 to_categorical 함수를 사용하여 하나를 수행할 수 있습니다. -핫 인코딩.

from tensorflow.keras.utils import to_categorical

Y_train = to_categorical(Y_train, num_classes=10)
Y_test = to_categorical(Y_test, num_classes=10)


이제 순환 신경망의 아키텍처를 정의해 보겠습니다. tensorflow.keras.models의 Sequential 모델을 사용하고 여기에 레이어를 추가합니다.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

model = Sequential()
model.add(LSTM(128, input_shape=(X_train.shape[1:]), activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))


위의 코드에서 Sequential 모델을 정의하고 각각 128 단위로 두 개의 LSTM 레이어를 추가합니다. 첫 번째 LSTM 계층의 input_shape 매개변수는 트레이닝 세트(X_train.shape[1:])의 단일 데이터 샘플 모양으로 설정됩니다. 또한 LSTM 레이어의 활성화 함수를 'relu'로 지정합니다. 첫 번째 LSTM 계층의 return_sequences=True 인수는 다음 LSTM 계층에 연결하는 데 필요한 출력 시퀀스를 반환하도록 합니다. 또한 과적합을 방지하기 위해 각 LSTM 레이어 뒤에 드롭아웃 비율이 0.2인 드롭아웃 레이어를 추가합니다. 마지막으로 10개의 유닛이 있는 Dense 레이어와 10개 클래스의 확률을 출력하는 softmax 활성화 함수를 추가합니다.

이제 손실 함수, 옵티마이저 및 평가 메트릭을 지정하여 모델을 컴파일하겠습니다.

model. compile (loss= 'categorical_crossentropy' , optimizer= 'adam' , metrics=[ 'accuracy' ])

이 예에서는 다중 클래스 분류 문제에 적합한 손실 함수로 범주형 교차 엔트로피를 사용합니다. 우리는 신경망 훈련에 널리 사용되는 Adam 옵티마이저를 사용합니다. 또한 교육 중에 모델의 성능을 모니터링하기 위한 평가 메트릭으로 '정확도'를 지정합니다.

마지막으로 교육 데이터를 사용하여 모델을 교육하고 테스트 데이터에서 평가해 보겠습니다.

model.fit(X_train, Y_train, batch_size= 32 , epochs= 10 , validation_data=(X_test, Y_test))

fit 함수에서 훈련 데이터와 레이블(X_train 및 Y_train)을 제공하고, 훈련을 위한 배치 크기와 에포크 수를 지정하고, 훈련 중 유효성 검사를 위한 테스트 데이터와 레이블도 제공합니다(validation_data=(X_test, Y_test)). .

그게 다야! 이제 M-NIST 데이터 세트에 대해 LSTM 셀을 사용하여 순환 신경망을 구축했습니다. 다양한 아키텍처, 하이퍼파라미터 및 데이터 세트를 실험하여 RNN의 기능을 더 자세히 탐색할 수 있습니다.

Recurrent Neural Networks (RNN) - Deep Learning w/ Python, TensorFlow & Keras p.7
Recurrent Neural Networks (RNN) - Deep Learning w/ Python, TensorFlow & Keras p.7
  • 2018.09.07
  • www.youtube.com
In this part we're going to be covering recurrent neural networks. The idea of a recurrent neural network is that sequences and order matters. For many opera...
 

암호화폐 예측 RNN 소개 - Python, TensorFlow 및 Keras를 통한 딥 러닝 p.8



암호화폐 예측 RNN 소개 - Python, TensorFlow 및 Keras를 통한 딥 러닝 p.8

여러분 안녕하세요. Python 튜토리얼 비디오로 또 다른 딥 러닝에 오신 것을 환영합니다. 이 비디오와 앞으로 나올 비디오에서는 순환 신경망(RNN)을 순차 데이터로 작업하는 보다 현실적인 예제에 적용하는 방법에 대해 논의할 것입니다. 구체적으로 우리는 암호화폐의 가격과 거래량으로 구성된 시계열 데이터 세트로 작업할 것입니다.

자세히 알아보기 전에 주식 가격이나 센서 데이터와 같은 다른 유형의 순차 데이터에 동일한 개념을 적용할 수 있음을 명확히 하고 싶습니다. 따라서 금융에 관심이 없더라도 개념을 이해하고 따라갈 수 있습니다.

이 튜토리얼의 목표는 순환 신경망을 사용하여 과거 가격과 거래량을 기반으로 암호화폐의 미래 가격을 예측하는 것입니다. Bitcoin, Litecoin, Ethereum 및 Bitcoin Cash의 네 가지 주요 암호 화폐에 중점을 둘 것입니다. 아이디어는 이러한 각 암호화폐에 대한 마지막 60분의 가격 및 거래량 데이터를 가져와 예를 들어 향후 3분 동안 Litecoin의 가격을 예측하기 위한 입력으로 사용하는 것입니다.

이러한 유형의 예측 문제는 시간 및 사용 데이터를 기반으로 서버 장애 또는 웹 사이트 트래픽 예측과 같은 다른 도메인에도 적용될 수 있습니다. 궁극적인 목표는 분류(예: 가격 상승 또는 하락 여부)를 예측하거나 회귀(예: 실제 가격 또는 비율 변화 예측)를 수행하는 것입니다.

순차 데이터로 작업하면 고유한 문제가 발생합니다. 먼저 데이터를 전처리하고 순환 신경망이 처리할 수 있는 시퀀스로 변환해야 합니다. 또한 서로 다른 암호화폐의 가격과 거래량이 서로 다른 척도를 가질 수 있다는 점을 고려하여 데이터를 균형화하고 정규화해야 합니다. 데이터 크기 조정은 단순히 255로 나누는 이미지 데이터와 같은 다른 도메인보다 더 복잡합니다.

또한 샘플 외 데이터를 사용하여 모델의 성능을 평가하는 것은 순차 데이터로 작업할 때 다른 문제입니다. 데이터 준비, 정규화 및 평가를 포함하여 다루어야 할 몇 가지 측면이 있습니다.

시작하기 위해 다운로드할 수 있는 데이터 세트를 제공했습니다. 튜토리얼 설명에서 다운로드 링크를 찾을 수 있습니다. 다운로드한 zip 파일을 추출하면 각각 하나의 암호화폐의 가격 및 볼륨 데이터에 해당하는 4개의 파일을 찾을 수 있습니다.

Python의 pandas 라이브러리를 사용하여 데이터 세트를 읽고 조작합니다. pandas가 설치되어 있지 않은 경우 터미널이나 명령 프롬프트에서 pip install pandas 명령을 실행하여 설치할 수 있습니다.

다음으로 pandas를 사용하여 데이터 세트를 읽고 데이터를 검사합니다. 각 암호화폐의 "종가" 가격 및 거래량 열에 초점을 맞출 것입니다. 다른 파일의 데이터를 병합하기 위해 "시간" 열을 각 데이터 프레임의 인덱스로 설정합니다. 그런 다음 공유 인덱스를 기반으로 데이터 프레임을 조인합니다.

병합된 데이터 프레임이 있으면 몇 가지 매개 변수를 정의해야 합니다. 여기에는 시퀀스 길이(고려할 과거 기간 수), 미래 기간(예측할 미래 기간 수) 및 예측 비율(예측하려는 암호화폐)이 포함됩니다.

우리의 경우, 지난 60분의 데이터를 기반으로 라이트코인(LTC)의 미래 가격을 예측하는 데 집중하고 미래 3분을 예측할 것입니다. 또한 현재 및 미래 가격을 기준으로 가격 상승 또는 하락으로 예측을 분류하는 분류 규칙을 정의합니다.

이러한 초기 단계가 완료되면 이제 데이터를 전처리하고 시퀀스를 만들고 순환 신경망을 훈련할 준비가 되었습니다. 다음 동영상에서 이러한 주제를 다룰 예정이니 계속 지켜봐 주시기 바랍니다.

따라 하려면 데이터 세트를 다운로드하고 필요한 라이브러리를 설정해야 합니다. 설명에서 사용할 수 있는 자습서의 텍스트 기반 버전에서 전체 코드 및 지침을 찾을 수 있습니다.

다루어야 할 것이 많으므로 가격 상승을 나타내는 1로 분류하겠습니다. 그렇지 않고 선물 가격이 현재 가격보다 낮으면 가격 하락을 나타내는 0으로 분류합니다. 이것은 우리가 분류에 사용하는 간단한 규칙이지만 다른 규칙으로 실험하거나 회귀를 사용하여 실제 가격 변동을 예측할 수도 있습니다.

이제 기본 DataFrame에서 대상 열을 만들어 보겠습니다. pandas의 이동 기능을 사용하여 "LTCUSD_close" 열의 값을 미래 기간으로 이동합니다. 이렇게 하면 분류를 결정하기 위해 현재 가격과 비교할 미래 가격이 제공됩니다. 결과를 "target"이라는 새 열에 할당합니다.

main_df[ 'target' ] = main_df[ 'LTCUSD_close' ].shift(-future_period)

값을 음수로 이동했기 때문에 "대상" 열의 마지막 몇 행에는 사용할 수 있는 미래 가격 데이터가 없기 때문에 NaN(숫자가 아님) 값이 있습니다. DataFrame에서 해당 행을 제거합니다.

main_df.dropna(inplace= True )

다음으로 입력 시퀀스를 만들어 보겠습니다. DataFrame을 통해 반복하고 Bitcoin, Litecoin, Ethereum 및 Bitcoin Cash의 이전 가격과 볼륨으로 구성된 sequence_length 길이의 시퀀스를 생성합니다. 이러한 시퀀스를 "시퀀스"라는 목록에 저장합니다.

sequences = []
for i in range(len(main_df) - sequence_length + 1):
    sequence = main_df.iloc[i:i+sequence_length, 1:-1].values.flatten()
    sequences.append(sequence)


위의 코드에서 main_df.iloc[i:i+sequence_length, 1:-1]은 첫 번째(시간) 열과 마지막(대상) 열을 제외하고 시퀀스의 행과 열을 선택합니다. 그런 다음 .values.flatten()을 사용하여 선택한 데이터를 1D 배열로 변환합니다.

마지막으로 시퀀스와 대상을 보다 쉽게 조작하고 훈련할 수 있도록 numpy 배열로 변환합니다.

import numpy as np

sequences = np.array(sequences)
targets = np.array(main_df['target'])


이제 반복 신경망을 교육할 준비가 된 입력 시퀀스와 해당 대상이 있습니다. TensorFlow 또는 PyTorch와 같은 라이브러리를 사용하여 모델 구축 및 학습을 진행할 수 있습니다.

여기에 제공된 코드는 부분 구현이며 데이터 전처리 단계에 중점을 둡니다. 모델 아키텍처를 추가로 개발하고 모델을 교육하고 성능을 평가해야 합니다. 또한 모델의 정확도를 개선하기 위해 하이퍼파라미터를 조정하고 다양한 기술을 실험해야 할 수도 있습니다.

모델을 교육하기 전에 필요한 라이브러리를 가져오고 누락된 데이터를 처리하고 기능(정규화, 크기 조정 등)을 사전 처리하고 데이터를 교육 및 테스트 세트로 분할해야 합니다.

이것이 순차 데이터로 작업하고 순환 신경망을 적용하여 미래 가격을 예측하는 과정을 이해하는 데 도움이 되기를 바랍니다. 딥 러닝 프로젝트에 행운을 빕니다!

Cryptocurrency-predicting RNN intro - Deep Learning w/ Python, TensorFlow and Keras p.8
Cryptocurrency-predicting RNN intro - Deep Learning w/ Python, TensorFlow and Keras p.8
  • 2018.09.15
  • www.youtube.com
Welcome to part 8 of the Deep Learning with Python, Keras, and Tensorflow series. In this tutorial, we're going to work on using a recurrent neural network t...
 

시퀀스 정규화 및 생성 Crypto RNN - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.9


시퀀스 정규화 및 생성 Crypto RNN - Python, TensorFlow 및 Keras를 사용한 딥 러닝 p.9

안녕하세요. Python, TensorFlow 및 Chaos 튜토리얼 시리즈를 사용한 딥 러닝의 또 다른 에피소드에 다시 오신 것을 환영합니다. 이 비디오에서 우리는 암호화폐의 미래 가격 움직임을 예측하기 위해 순환 신경망(RNN)을 구현하는 미니 프로젝트를 계속 진행할 것입니다. 우리는 세 가지 다른 암호 화폐 가격 및 거래량과 함께 통화의 가격 및 거래량 순서를 사용할 것입니다.

지금까지 데이터를 가져와 병합하고 대상을 만들었습니다. 이제 다음 단계로 넘어 갑시다. 데이터에서 시퀀스를 만들고 균형 조정, 정규화 및 크기 조정과 같은 작업을 수행해야 합니다. 그러나 이러한 작업을 시작하기 전에 샘플 외 테스트 문제를 해결하는 것이 중요합니다.

시간 및 시계열 데이터를 처리할 때 표본 외 데이터로 부분을 섞고 무작위로 선택하면 편향된 모델이 발생할 수 있습니다. 우리의 경우 60분의 시퀀스와 3분의 예측 창을 사용하여 샘플 외 데이터를 임의로 선택하면 샘플 내 및 샘플 외 세트 모두에 비슷한 예가 나타날 수 있습니다. 이렇게 하면 모델이 보이지 않는 데이터에 대해 과대적합되고 성능이 저하되기 쉽습니다.

이를 해결하려면 샘플 외 데이터를 신중하게 선택해야 합니다. 시계열 데이터의 경우 미래의 데이터 청크를 샘플 외 집합으로 선택하는 것이 좋습니다. 우리의 경우 과거 데이터의 마지막 5%를 샘플 외 데이터로 사용합니다. 이 접근 방식은 시간의 5% 전에 모델 구축을 시뮬레이션하고 앞으로 테스트합니다.

이제 샘플 외부 데이터의 분리를 구현해 보겠습니다. 타임스탬프를 기준으로 데이터를 정렬하고 마지막 5% 시간의 임계값을 찾습니다. 이러한 방식으로 데이터를 분리함으로써 샘플 외 세트에 미래의 데이터가 포함되도록 하여 데이터 유출 및 편향된 테스트를 방지합니다. 일단 분리되면 유효성 검사 데이터와 훈련 데이터를 갖게 됩니다.

계속 진행하기 전에 유효성 검사 데이터와 학습 데이터를 모두 전처리해야 한다는 점에 유의해야 합니다. 시퀀스를 생성하고, 데이터의 균형을 맞추고, 정규화하고, 크기를 조정하고, 기타 필요한 작업을 수행합니다. 이 프로세스를 간소화하기 위해 DataFrame을 입력으로 사용하고 이러한 모든 전처리 단계를 수행하는 preprocess_df라는 함수를 만들어 보겠습니다.

먼저 sklearn 라이브러리에서 전처리 모듈을 가져옵니다. 설치하지 않은 경우 pip install sklearn을 실행하여 설치할 수 있습니다. 그런 다음 DataFrame을 매개변수로 사용하는 preprocess_df 함수를 정의합니다.

함수 내에서 DataFrame에서 불필요한 future 열을 삭제하는 것으로 시작합니다. 다음으로 DataFrame의 열을 반복하고 백분율 변경 변환을 적용합니다. 이 정규화 단계는 암호화폐 전반에 걸쳐 다양한 가격과 거래량을 처리하는 데 도움이 됩니다.

데이터를 정규화한 후 NaN 값이 포함된 모든 행은 교육 중에 문제를 일으킬 수 있으므로 삭제합니다. 그런 다음 preprocessing.scale 함수를 사용하여 0과 1 사이의 값을 조정합니다. 또는 자체 조정 논리를 구현할 수 있습니다.

이제 데이터를 사전 처리했으므로 순차 데이터 처리로 이동하겠습니다. sequence_data라는 빈 목록을 만들고 최대 길이가 60인 prev_days라는 deque 개체를 초기화합니다. deque 개체를 사용하면 새 항목을 효율적으로 추가하고 최대 길이에 도달하면 이전 항목을 자동으로 제거할 수 있습니다.

다음으로 이제 정규화되고 확장된 데이터가 포함된 DataFrame의 값을 반복합니다. 각 행에 대해 값을 prev_days deque에 추가합니다. deque의 길이가 최소 60에 도달하면 순차적 데이터를 채우기 시작합니다.

for i in DF.values:
    # Create a deque object with a maximum length of max_len
    if len(prev_days) < max_len:
        prev_days.append([n for n in i[:-1]])
    else:
        # Append the current values to prev_days
        prev_days.append([n for n in i[:-1]])
        # Add the sequence to the sequential_data list
        sequential_data.append([np.array(prev_days), i[-1]])
        # Remove the oldest sequence from prev_days
        prev_days.popleft()


이 코드 스니펫에서는 데이터 프레임 DF의 값을 반복합니다. prev_days(deque 객체)의 길이가 max_len보다 작은지 확인합니다. 그렇다면 prev_days에 현재 값(i[:-1])을 추가합니다. 그렇지 않으면 현재 값을 prev_days에 추가하고 시퀀스 [np.array(prev_days), i[-1]]를 sequence_data 목록에 추가하고 prev_days.popleft()를 사용하여 prev_days에서 가장 오래된 시퀀스를 제거합니다.

이제 시퀀스를 생성했으므로 데이터 균형을 진행할 수 있습니다. 학습 데이터에서 특정 클래스에 대한 편향을 방지하려면 균형을 맞추는 것이 중요합니다. 이 경우 우리 클래스는 다른 가격 변동(상승 또는 하락)입니다. 데이터의 균형을 맞추기 위해 각 클래스의 발생 횟수를 계산하고 소수 클래스와 일치하도록 다수 클래스의 시퀀스 수를 제한합니다.

buys = []
sells = []

for seq, target in sequential_data:
    if target == 0:
        sells.append([seq, target])
    elif target == 1:
        buys.append([seq, target])

# Determine the minimum number of sequences in buys and sells
lower = min(len(buys), len(sells))

# Balance the data by randomly selecting the required number of sequences from buys and sells
buys = buys[:lower]
sells = sells[:lower]

# Concatenate buys and sells to create balanced_data
balanced_data = buys + sells

# Shuffle the balanced_data
random.shuffle(balanced_data)


위의 코드에서는 구매 및 판매라는 두 개의 개별 목록을 만듭니다. sequence_data 목록을 반복하고 해당 목록에 해당 대상 값이 있는 시퀀스를 추가합니다. 다음으로 구매와 판매 사이의 최소 시퀀스 수를 결정합니다. 데이터의 균형을 맞추기 위해 두 목록을 이 최소 수로 제한합니다. 그런 다음 구매와 판매를 연결하여 balance_data를 생성합니다. 마지막으로, 임의성을 보장하기 위해 균형 데이터를 섞습니다.

데이터의 균형을 맞춘 후 입력 기능(X)과 대상 레이블(y) 배열로 분할할 수 있습니다.

X = []
y = []

for seq, target in balanced_data:
    X.append(seq)
    y.append(target)

# Convert X and y to numpy arrays
X = np.array(X)
y = np.array(y)


이제 X가 입력 기능으로, y가 대상 레이블로 지정되었으므로 데이터를 교육 및 검증 세트로 분할할 수 있습니다.

# Split the data into training and validation sets
train_x, val_x, train_y, val_y = train_test_split(X, y, test_size=0.2, random_state=42)


위의 코드에서 scikit-learn의 train_test_split 함수를 사용하여 데이터를 교육 및 검증 세트로 분할합니다. 훈련 세트(train_x 및 train_y)에 데이터의 80%를 할당하고 20%를 할당합니다.

# Normalize the data
scaler = MinMaxScaler()
train_x = scaler.fit_transform(train_x.reshape(train_x.shape[0], -1))
val_x = scaler.transform(val_x.reshape(val_x.shape[0], -1))

# Reshape the data back to its original shape
train_x = train_x.reshape(train_x.shape[0], train_x.shape[1], -1)
val_x = val_x.reshape(val_x.shape[0], val_x.shape[1], -1)


위의 코드에서 scikit-learn의 MinMaxScaler를 사용하여 입력 기능(train_x 및 val_x)을 정규화합니다. fit_transform 메서드는 훈련 세트에서 스케일러를 맞추고 데이터를 정규화하는 데 사용됩니다. 그런 다음 검증 세트에서 변환 방법을 사용하여 교육 세트를 기반으로 동일한 스케일링을 적용합니다. 데이터는 원하는 모양과 일치하도록 스케일링 전후에 재구성됩니다.

데이터가 준비되었으므로 이제 LSTM 모델을 구축하고 교육할 수 있습니다.

model = Sequential()
model.add(LSTM(units=128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM(units=128))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(Dense(units=32, activation='relu'))
model.add(Dropout(0.2))

model.add(Dense(units=2, activation='softmax'))

# Define the optimizer and compile the model
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

# Define early stopping
early_stopping = tf.keras.callbacks.EarlyStopping(patience=3)

# Train the model
history = model.fit(train_x, train_y, validation_data=(val_x, val_y), epochs=20, callbacks=[early_stopping])


위의 코드에서 Sequential()을 사용하여 순차 모델을 정의합니다. 각각 128단위의 LSTM 레이어 3개를 추가한 다음 과적합을 방지하기 위해 비율이 0.2인 드롭아웃 레이어를 추가합니다. 배치 정규화는 각 LSTM 레이어 후에 적용됩니다. 그런 다음 32개의 유닛과 ReLU 활성화 함수가 있는 dense 레이어를 추가하고 다른 드롭아웃 레이어를 추가합니다. 마지막으로, 우리는 2개의 유닛(매수와 매도의 두 가지 클래스를 나타냄)과 softmax 활성화 기능이 있는 밀집된 레이어를 추가합니다.

옵티마이저를 학습률이 0.001인 Adam으로 정의하고 희소 범주 교차 엔트로피를 손실 함수로, 정확도를 메트릭으로 사용하여 모델을 컴파일합니다.

조기 중지는 EarlyStopping 콜백을 사용하여 유효성 검사 손실을 모니터링하고 3 epoch 후에도 개선되지 않으면 교육을 중지하는 것으로 정의됩니다.

모델은 훈련 데이터(train_x 및 train_y), 검증 데이터(val_x 및 val_y) 및 정의된 콜백을 전달하는 fit 함수를 사용하여 훈련됩니다. 훈련은 20 epoch 동안 수행됩니다.

특정 요구 사항에 따라 모델 아키텍처, 하이퍼파라미터 및 교육 구성을 조정할 수 있습니다.

# Evaluate the model
test_x = scaler.transform(test_x.reshape(test_x.shape[0], -1))
test_x = test_x.reshape(test_x.shape[0], test_x.shape[1], -1)

loss, accuracy = model.evaluate(test_x, test_y)
print(f'Test Loss: {loss:.4f}')
print(f'Test Accuracy: {accuracy*100:.2f}%')


위의 코드에서는 테스트 데이터를 사용하여 훈련된 모델을 평가합니다. 먼저 스케일러의 변환 방법을 사용하여 테스트 입력 데이터를 정규화하고 원하는 모양에 맞게 재구성합니다.

그런 다음 모델의 평가 방법을 사용하여 테스트 데이터의 손실과 정확도를 계산합니다. 평가 방법은 테스트 입력 데이터(test_x)와 해당 실측 레이블(test_y)을 사용합니다. 계산된 손실 및 정확도는 콘솔에 인쇄됩니다.

스크립트 시작 부분에서 필요한 모듈을 가져와야 합니다.

import numpy as np
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dropout, BatchNormalization, Dense


또한 코드를 실행하기 전에 필요한 데이터 세트(train_x, train_y, val_x, val_y, test_x, test_y)가 준비되어 있는지 확인하세요.

이 코드를 사용하면 구매/판매 분류 작업을 위해 LSTM 모델을 훈련하고, 데이터를 정규화하고, 테스트 세트에서 모델의 성능을 평가할 수 있습니다. 특정 요구 사항에 따라 자유롭게 조정하거나 수정하십시오.

Normalizing and creating sequences Crypto RNN - Deep Learning w/ Python, TensorFlow and Keras p.9
Normalizing and creating sequences Crypto RNN - Deep Learning w/ Python, TensorFlow and Keras p.9
  • 2018.09.16
  • www.youtube.com
Leading up to this tutorial, we've learned about recurrent neural networks, deployed one on a simpler dataset, and now we are working on doing it with a more...
사유: