반응형
반응형


반응형
반응형

hdf5 파일형식이란? (https://www.hdfgroup.org/hdf5/)

계층적 데이터 형식(Hierarchical Data Format, HDF)은 HDF Gruop에 의해 관리되고 있는 대용량의 데이터를 저장하기 위한 파일 형식이다.

HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.


hdf5의 특징 (https://support.hdfgroup.org/HDF5/whatishdf5.html)

  • XML과 동일하게 자기 기술적으로 구성되어있어 데이터 형식을 파일 안에 기술이 가능하다.
  • 많은 양의 데이터를 저장 가능하다.
  • 검색 속도가 빠르다.
  • 병렬 입출력을 지원한다.
  • 데이터의 무작위 조회가 가능하다.
  • 20여년 이상 개발되어온 포맷으로 안정적이다.
  • 수많은 프로그래밍 언어와 오픈소스 라이브러리 API가 지원된다.

hdf5에 대해서

Python에서 사용하는 방법


참고 링크


반응형
반응형

python 문자열 아스키코드 알아내기


# 문자열에서 아스키 코드값 추출

print(ord('a')) => 97


# 아스키 코드에서 문자열로 변환 : https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C

print(chr(65)) => A


# 슬라이싱을 이용하여서 문자열의 아스키 값 추출하기

chr(int(Str[시작:끝])))

- 이때 시작값은 0부터 시작이다.

반응형
반응형

정규식 문법

사용 문자

사용법

의미

비고

.

a.b

\n(줄 바꿈)를 제외한 모든 문자와 매치됨을 의미한다.

즉, a와 b 문자 사이에 모든 문자가 허용된다.

ex) aab, acb, afb, a3b ....


^

^app

문자열의 시작을 나타낸다.

ex) ^app apple.... , appads ..

즉, app~로 시작하는 문자열이 모두 매치된다.


$

ple$

문자열의 종료를 나타낸다.

ex) abcple, aee3ple, oefple ....


[]

apple[a-z]

집합을 의미한다.

ex) [abcd]의 경우 a 또는 b 또는 c또는 d를 의미한다.

ex) [^5]일 경우 5를 제외한 모든 문자를 의미한다.

ex) [a-c]일 경우, a~c 문자를 의미한다.

apple[a-z]는 applee, applec... 와 매치되고 

apple4, appleE와 같은 문자일 경우, 매치되지 않는다.


|

a|b

OR 연산을 의미한다. 

ex) a|b는 a 또는 b문자열을 의미한다.


()

(a|b)

괄호 안의 정규식을 group으로 만든다.

직접 괄호를 통하여 매칭하기 위해서 \(, \[로도 나타낸다.


*

ca*t

0회 이상 반복되는 것을 의미한다. 

ex) ca*t는 ct, cat, caat, caaaaat) 등과 매치된다.


+

a+

1회 이상 반복되는 것을 말한다.

ex) cat, caaat 등


?

ca?t

0회 또는 1회 이상 반복되는 것을 의미한다.

ex) ca?t는 cat, ca와 매치된다.


{m}

 ca{2}

{m}회 반복하는 것을 말한다. 

ex) ca{2}는 caa와 매치된다. 

 

{m, n}

 ca{m,n}

m 회부터 n회까지 반복됨을 말한다.

ex) ca{2,4}p는 caap, caap, cbbbp와 매치된다.

 

{m,}

 

 

 


정규식 예제

import re


print (bool(re.match( '[a-c]{3}', 'aaa')))

→ True


반응형
반응형


#텍스트간의 유사성을 판단하는 : 편집거리 알고리즘 (Levenshtein distance)

https://en.wikipedia.org/wiki/Levenshtein_distance




두 문자열의 유사도를 판단하는 알고리즘으로 비교하려는 문자열을 기준으로 문자열을 삽입/삭제/변경(수정)을 몇 번이나하여 동일하게 바꿀 수 있는 지를 계산하여 유사도의 판단 기준으로 삼는 알고리즘이다.


예시) next과 text의 유사도를 알고 싶다면?

 {}

N

E

X

T

T

E

 

 

 

 

X

 

 

 

 

T

 

 

 

 


ㄱ. T를 N으로 바꾸는 방법

(방법1) T를 삭제(+1)하고 N으로 수정(+1)한다. : 비용2

(방법2) T에 N을 추가(+1)하고 (TN) T를 삭제(+1)한다. : 비용 2

(방법3) T를 N으로 수정(+1)한다. : 비용1


이런 방식으로 모든 칸의 비용을 계산한 뒤, 최소 비용의 값을 구하면 된다.



참고 링크


반응형
반응형

#모두를 위한 딥러닝 강좌 lec 8-1: 딥러닝의 기본 개념: 시작과 XOR 문제

https://www.youtube.com/watch?v=n7DNueHGkqE&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=22



사람의 뇌는 굉장히 복잡하게 연결되어있는데, 연결된 부분들을 자세히보니(뉴런)을 자세히 보니 단순하게 움직이는 구조더라! input → input이 들어오는 신호의 길이에 따라서 input x* weight 되면서 계속해서 Sum이되고 Bias라는 값이 더해지면서 전달이 되더라!

근데 그 어떤값을 통해서 뇌가 활성화가 되고 활성화가 되지 않기도 하더라! 그래서 나온 컴퓨터로 구현할 수 있지 않을까해서 나온 것이


Activation Functions


값이 어떤 값보다 크면 1을 주고 어떤 값보다 낮으면 0을 주는 형태로 만들면 되겠다! 라는 아이디어가 나왔다.


Logistic regression Units


지난 번 시간에 배웠던 Logistic regression이 여러개가 있따면 이런식으로 네트워크를 형성할 수 있겠다!

= 여러개의 출력을 동시에 낼 수 있다.


False Promises (허황된 약속)


Frank 박사는 당시에 그러한 알고리즘을 통해서 말하고, 걷고, 글을쓰고, 자기자신을 인지할 수 있다고 말을 함...

많은 사람들에게 관심을 끌게 되었고...


근데 성과가 없었던 것은 아니였다고 한다..


AND/OR problem : linearly separable? 


그 당시에 AND와 OR라는 로직을 풀 수 있으면, 이것들을 조합해서 인공지능 기계를 만들 수 있겠다고 생각했었다.


OR = x1(가로축 값)과 x2(세로축 값)의 값이 있을 때

x1이 1이고 x2가 1이면 = 1이되고

x1이 0이고 x2가 0이면 = 0이되는 것을 안다면 (왼쪽 or 그림)


x1+x2를 통해서 Y라는 값을 만들 수 있을까?

linear하기 때문에 값을 구분할 수 있다!


AND

x1이 0일때, x2도 0이면은 값이 0이 되고,

x1이 1일때, x2도 1이면은 값이 1이되는 (오른쪽 and 그림)


..... 진짜 인공지능 머신을 만들 수 있겠다 싶었는데!!


XOR라는 이상한게 나옴! 어떻게 나왔느냐


 x1

 x2

 결과

 0

 0

0

 0

 1

1

 1

 0

 1 

 1

 1

0


값이 같을 때 0, 값이 다를때 1이되는.. XOR를 가지고 x1과 x2를 더해서 Y값을 나오게 기계에게 시켰는데?

Y가 정확하게 안나오는 것이다..


이유는 +와 -값이 다르기 흩어져있기 때문에 어떻게해도 linear하게 선이 그어질 수 없어서 100프로 맞게 나올 수가 없다. 

확률이 아무리해도 50%밖에 안나오더라.. 그래서 많은 사람들이 좌절함


Perceptrons(1969) by Minsky

이런 시기에 Minsky라는 교수가 XOR는 수학적으로 풀 수 없다며 수학적인 증명으로 말했고

[  ] [  ] [  ] MLP를 여러개 합쳐서 XOR를 할 수는 있지만, 각각 [  ]안에 들어가는 weight 과 bias를 학습시킬 수 없다고 했다.






그러다가 74,84년도 쯤에 해결이 된다.

Backpropagation (1974, 1982)

가운데에 네트워크가 연결되어있고 w+b를 통해서 출력을 만들어낼 수 있는데

출력이 원하는 결과가 아닐 경우 w나 b를 조절해야했는데,


나중에 앞에서 w나 b값을 조절하지말고 나중에 w와 b를 조절하면 어떨까?하고 논문을 냄


이것을 통해서 본격적으로 ML에 이 알고리즘이 사용되기 시작함.


그리고 나중에 고양이의 시신경이 어떻게 움직이는지 보려고 했는데

그림을 다르게 줄 때마다 새로운 네트워크를 형성하여가는 것을 발견함


즉, 일부를 인식하고 나중에 합쳐지는 것이 아닐까란 생각을 함


Convolutional Neural Networks

그림을 모두 한번에 읽는 것이 아니라. 

A라는 그림을 잘라서 작게 쪼개서 머리로 보내고 나중에 그림을 다 합치는 방법을 발견하였다 => Neural Networks 방법 발견


A Big problem


Backpropagetion을 통해서 몇개는 괜찮던데 네트워크가 여러개로 만들어지는 머신러닝의 경우,

뒤에서 조절된 W와 B값이 다시 앞까지 가는데, 정보가 소실되고 어렵게 됨..

결국 간단한 알고리즘들이 더 성능이 좋더라!


반응형
반응형

#모두를 위한 립러닝 강좌 7-2 : Meet MNIST Dataset

https://www.youtube.com/watch?v=ktd5yrki_KA&index=21&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm


...

반응형
반응형

아파치 POI란? (https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_POI)

아파치 POI(Apache POI)는 아파치 소프트웨어 재단에서 만든 라이브러리로서 마이크로소프트 오피스 파일 포맷을 순수 자바 언어로서 읽고 쓰는 기능을 제공한다. 주로 워드엑셀파워포인트와 파일을 지원하며 최근의 오피스 포맷인 Office Open XML File Formats [1] (OOXML, 즉 xml 기반의 *.docx, *.xlsx, *.pptx 등) 이나 아웃룩비지오퍼블리셔 등으로 지원 파일 포맷을 늘려가고 있다.


아파치 POI 다운로드 경로 : https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.15-20160924.tar.gz

Binary Distribution > poi-bin-3.15 버전 다운로드 

21 September 2016 - POI 3.15 available#

The Apache POI team is pleased to announce the release of 3.15. Featured are a handful of new areas of functionality and numerous bug fixes.

A summary of changes is available in the Release Notes. A full list of changes is available in the change log. People interested should also follow the dev list to track progress.

The POI source release as well as the pre-built binary deployment packages are listed below. Pre-built versions of all POI components are available in the central Maven repository under Group ID "org.apache.poi" and Version "3.15".



라이브러리 내용 : https://poi.apache.org/overview.html#components)

 파일명

 내용

 비고

 poi-3.15.jar

 

 

 poi-examples-3.15.jar

 

 

 poi-excelant-3.15.jar

 

 

 poi-ooxml-3.15.jar

 MS Office Open XML (https://en.wikipedia.org/wiki/Office_Open_XML)

 MS사의 XML 기반의 파일형식을 읽는데 필요한 lib

ooxml-lib\curvesapi-1.04.jar

ooxml-lib\xmlbeans-2.6.0.jar

commons-collections4-x.x.jar 

(https://commons.apache.org/proper/commons-collections/download_collections.cgi)

poi-ooxml-schemas-3.15.jar


위에 있는 lib 파일을 모두 import 해야 함..

디펜던시 ㅡㅡ 

 poi-ooxml-schemas-3.15.jar

 

 

 poi-scratchpad-3.15.jar

 

 


2003 Excel 버전은 XSSF(확장자가 xls)로 읽고

2007 Excel 버전 이후는 HSSF(확장자가 xlsx)를 통해서 파일을 읽고 쓸 수 있다. 


참고 예제 : 

https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/

http://www.programcreek.com/java-api-examples/index.php?api=org.apache.poi.ss.usermodel.WorkbookFactory

파일 읽기

<기존 - 각각 읽어들이는 방법>

HSSFWorkbook wb = new HSSFWorkbook(new File("파일명.xls"));

XSSFWorkbook wb = new XSSFWorkbook(new File("파일명.xlsx"));


<WorkbookFactory를 통해선 구분없이 읽어들이는 방법> : https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

Workbook wb = WorkbookFactory.create( File객체 );

Workbook wb = WorkbookFactory.create( File객체);


첫번째 Sheet 불러오기

Sheet sf = wb.getSheetAt(0); 


첫번째 Sheet의 rows수 가져오기

sf.getLastRowNum();


* 최종

 try {


            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));

            Workbook workbook = new XSSFWorkbook(excelFile);

            Sheet datatypeSheet = workbook.getSheetAt(0);

            Iterator<Row> iterator = datatypeSheet.iterator();


            while (iterator.hasNext()) {


                Row currentRow = iterator.next();

                Iterator<Cell> cellIterator = currentRow.iterator();


                while (cellIterator.hasNext()) {


                    Cell currentCell = cellIterator.next();

                    //getCellTypeEnum shown as deprecated for version 3.15

                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0

                    if (currentCell.getCellTypeEnum() == CellType.STRING) {

                        System.out.print(currentCell.getStringCellValue() + "--");

                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {

                        System.out.print(currentCell.getNumericCellValue() + "--");

                    }


                }

                System.out.println();


            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }


외 참고사항

MultipartFile to File로 변경하는 방법 : http://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file

File convFile = new File(multipart.getOriginalFilename());

multipart.transferTo(convFile); 

return convFile;



반응형

+ Recent posts