전체 글 117

[Leetcode] Reverse String

Problem) 정말 간단한 문자열 뒤집기 문제 입니다. 문제의 핵심은 in-place로 추가 메모리를 사용하지 않고 해결하라는 조건입니다. Solution) class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ left, right = 0, len(s) - 1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1 left와 right로 처음과 끝의 인덱스를 설정하고 서로 맞바꾸는 방법으로 문자열을 뒤집을 수 있습니다. * 추가적으로 python에서 제공하..

알고리즘 2020.08.19

[Python] 슬라이싱(slicing) 기본

파이썬에서 슬라이싱(slicing)이란, 연속적인 객체(리스트, 튜플, 문자열)들에 대해서 특정 범위를 지정 선택해서 부분 객체들을 가져오는 기법을 의미합니다. 즉 연속적인 객체의 일부분을 복사해서 가져온다고 생각하면 됩니다. 기본 형태 만약 temp라는 리스트가 있고 다음과 같은 값을 갖고 있다고 할 때, 아래와 같은 형태로 슬라이싱 할 수 있습니다. temp = [1, 2, 3, 4, 5] # 슬라이싱 기본 형태 # temp[start:end:step] start : 시작 위치 end : 끝 위치 (포함 x) step : stride라고도 하며 몇개씩 가져올지 정할 수 있습니다. (옵션) 예제 temp[1:] # [2, 3, 4, 5] temp[:-1] # [1, 2, 3, 4] temp[2:4] #..

[Python] 문자열 활용법 정리

파이썬에서 문자열을 활용하는 다양한 방법들 중 자주 사용되는 방법들에 대해서 정리해보도록 하겠습니다 s = "Python is Easy" s.upper() # 대문자로 변경 # PYTHON IS EASY s.lower() # 소문자로 변경 # python is easy s.split() # 공백 기준 문자열 나누기 # ['Python', 'is', 'Easy'] s.upper() # 공백 포함 문자열 나누기 # ['Python is Easy'] s_1 = '123' s_2 = 'abc' s_3 = s_1 + s_2 s_1.isdigit(), s_2.isdigit() # 숫자로만 구성되어 있으면 True, 아니면 False # True False s_1.isalpha(), s_2.isalpha() # 문자..

[Leetcode] Valid Palindrome

Problem) 간단한 문자열 문제입니다. 코딩 문제로 문자열과 정규식 관련 문제를 은근히 자주 마주칠 수 있는데요. 이번 문제를 통해서 다시 한번 문자열 관련 다양한 처리 방법들에 대해서 정리해보면 좋을 것 같네요. Solution) # 문자열 활용 솔류션 class Solution: def isPalindrome(self, s: str) -> bool: strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) while len(strs) > 1: if strs.pop(0) != strs.pop(): return False return True # 정규식 활용 솔류션 import re class Solution: def isPalind..

알고리즘 2020.08.18

Docker 사용하기

Docker를 사용해보긴 했지만 아직 부족한 부분이 많다는 생각을 하고 있는데 때마침 Medium에서 좋은 정리글을 발견하여 이 시점을 계기로 더 전문적으로 Docker를 사용하기 위한 포스팅들을 할 예정입니다. 프로그래머에게 "environment"란 개념은 정말 중요하면서도 관리하기가 어려운 부분 중 하나입니다. 그 이유 중 하나는 코드에 사용되는 라이브러리가 지속적으로 업데이트 되고 그에 따라서 하나의 라이브러리 버전 업데이트가 코드에 영향을 끼치고 에러를 발생시킬 수 있기 때문입니다. 특히나 동시에 여러 프로젝트를 진행하고 있다면 이러한 문제들은 더욱 복잡해집니다. 또한, 개발한 코드를 다른 OS에서 동작하도록 하려면 코드를 전부 다 수정해야 할 수도 있습니다. 이러한 문제를 간단하게 만들어 주는..

DCGAN

Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks DCGAN? DCGAN은 불안정한 GAN의 구조적 단점을 보완하고 좋은 성능을 보여주었습니다. DCGAN은 이름 (Deep Convolutional GAN)에서도 알 수 있듯이 Convolutional 구조를 GAN에 사용하였습니다. 지도 학습에서는 CNN을 이용하여 좋은 성능들이 이미 보였지만, 이 DCGAN은 GAN과 같이 비지도 학습에 Convolutional 구조를 사용하여 좋은 성능을 보인 대표적인 결과물이라고 할 수 있습니다. 따라서 이후의 대부분의 GAN 모델들은 DCGAN의 구조가 기반으로 사용되었다고 할 수 있습니다. DCG..

머신러닝/Vision 2020.08.18

LSGAN

Motivation 성공적인 GAN의 성능에도 불구하고 discriminator 학습 과정에서 "Gradient Vanishing" 문제가 발생하여 모델의 학습이 제대로 이루어지지 않는 현상이 발견 되었습니다. discriminator에는 sigmoid cross-entropy loss 함수를 사용하는데 이는 discriminator가 입력으로 받은 샘플이 진짜일 확률을 출력한다는 것을 의미합니다. (진짜 -> 1 / 가짜 -> 0) 그런데 이 loss 함수를 사용하면 generator 학습시 vanishing gradient 현상이 발생하게 됩니다. 왜 이런 현상이 발생하는지 그림을 참조해서 설명하도록 하겠습니다. 위 그림에서 decision boundary를 기준으로 아래를 진짜, 위를 가짜로 판별할..

머신러닝/Vision 2020.08.12

Generative Adversarial Networks?

Generative Adversarial Networks (GAN)은 2014년 Ian Goodfellow가 Generative Adversarial Nets 논문에서 처음 제안한 비지도 학습 인공지능 알고리즘입니다. 다른 딥러닝 알고리즘들과 다르게 데이터 생성에 목적을 둔 알고리즘으로 다른 알고리즘들에 비해 학습이 어렵다는 특징이 있지만, 지금까지 수많은 연구 끝에 성능을 향상할 수 있었고 다양한 분야에서 활용되고 있습니다. 특히 Image 도메인에서 주로 활용되고 있으며 GAN하면 가장 쉽게 떠올릴 수 있는 Image-to-Image translation의 대표 모델 CycleGAN이 있습니다. 아래 이미지가 바로 CycleGAN을 통해 말을 얼룩말로 변환한 결과물입니다. GAN 모델 구조 GAN은 ..

머신러닝/Vision 2020.08.12