반응형

아무처리 안해도 화면 돌아가는데 반응은 한다. 그런데 매번 Activity의 onCreate()가 다시 불리는 구조.

만약 onCreate()가 매번 불리는게 싫다면 여기 참조

화면 전환 이벤트를 처리하고 싶다면 onConfigurationChanged()를 overide하면 되는데 여기 참조

단!, 위 링크대로 하면 onConfigurationChanged()가 안불리고, 여기에 있는대로 API level 13이상에서는 screenSize를 추가 해줘야 한다.

원래는 landscape용 화면 xml을 별도로 만들어 주면 좋다.

여기 참조

소스코드 상에서 현재의 orientation을 알아오는데는 다음처럼 하면된다.

(상수값을 직접 만들어 써야해서 조금 지저분 하다.)

(참고로 ORIENTATION_180으로는 핸드폰 돌려도 들어오지 않았다.)


final int ORIENTATION_0 = 0;
final int ORIENTATION_90 = 1;
final int ORIENTATION_180 = 2;
final int ORIENTATION_270 = 3;

Display display = ((WindowManager)mc.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();
switch (orientation)
{
  default:
  case ORIENTATION_0: // Portrait
    //dostuff
	  System.out.println("orientation ORIENTATION_0");
    break;
  case ORIENTATION_90: // Landscape left
    //do stuff
	  System.out.println("orientation ORIENTATION_90");
    break;
  case ORIENTATION_180: // Upside down.
    //do stuff
	  System.out.println("orientation ORIENTATION_180");
    break;
  case ORIENTATION_270: // Landscape right
    //do stuff
	  System.out.println("orientation ORIENTATION_270");
    break;
}

참조할 만한 링크는 여기 이다.

emulator

AVD(emulator) portrait/landscape 전환 : Ctrl + F11

근데 2.3이나 4.4버전의 경우는 화면 전환시 버그가 있다고 한다. (나도 경험)

여기

반응형
반응형

descriptor

> __get__, __set__, and __delete__. If any of those methods are defined for an object, it is said to be a descriptor.

> descriptors only work for new style objects and classes.

__get__, __set__ 둘다 가진넘을 data descriptor라고 하고,

__get__ 하나만 가진넘은 non-data descriptor라고 한다.


class RevealAccess(object):
    """A data descriptor that sets and returns values
       normally and prints a message logging their access.
    """

    def __init__(self, initval=None, name='var'):
        self.val = initval
        self.name = name

    def __get__(self, obj, objtype):
        print 'Retrieving', self.name
        return self.val

    def __set__(self, obj, val):
        print 'Updating' , self.name
        self.val = val

>>> class MyClass(object):
    x = RevealAccess(10, 'var "x"')
    y = 5

>>> m = MyClass()
>>> m.x
Retrieving var "x"
10
>>> m.x = 20
Updating var "x"
>>> m.x
Retrieving var "x"
20
>>> m.y
5

위 예제보면 별것도 아니네..

그냥 클래스 멥버variable접근할때 함수불리게 해서 추가동작 할 수 있는걸로 보인다.

(decorator랑도 비슷?)

근데 여러가지 파이선 기능 구현할때 이 기능을 사용해서 구현했다는거 같다.

> Descriptors are a powerful, general purpose protocol. They are the mechanism behind properties, methods, static methods, class methods, and super(). They are used used throughout Python itself to implement the new style classes introduced in version 2.2. Descriptors simplify the underlying C-code and offer a flexible set of new tools for everyday Python programs.

반응형
반응형

약수구하기

 

 


//Naive
VI Divisors(int n)
{
	VI v;
	FORE(i, 1, n)
	{
		if (n%i == 0) v.push_back(i);
	}
	return v;
}

//대칭성을 활용하면 sqrt 복잡도에 구할 수 있다.
VI Divisors2(int n)
{
	set<int> v;
	for (int i = 1; i*i <= n; i++)
	{
		if (n%i == 0) 
		{
			v.insert(i);
			v.insert(n/i);
		}
	}
	return VI(v.begin(), v.end());
}
반응형
반응형

reshape

이 함수는 다음처럼 차원을 바꿀 때 사용함

2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태
2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태

원래는 2행 3열인 2차원 array 자료를

reshape로 같은 값을 3행 2열 배열로 바꾼 결과
reshape로 같은 값을 3행 2열 배열로 바꾼 결과

reshape으로 위처럼 3행 2열로 변경할 수 있다.

reshape(6)으로 배열을 1차원 형태로 바꾼 결과
reshape(6)으로 배열을 1차원 형태로 바꾼 결과

위 처럼 2차원을 1차원으로 줄일 수도 있고,

reshape(6, 1)로 열 벡터 형태를 만든 결과
reshape(6, 1)로 열 벡터 형태를 만든 결과

1차원같은 2차원으로 만들수도 있다(이런 형태가 Keras 쓰다보면 필요함)

더욱 좋은 사용법은 -1을 이용해서 일부값을 스킵하면 알아서 채워준다는 것

reshape(-1, 1)에서 행 크기를 자동 추론한 결과
reshape(-1, 1)에서 행 크기를 자동 추론한 결과

nan 체크

놀랍게도 아래 방법으로는 체크가 되지 않는 경우가 있음을 발견


>>> X[date][isin]
array([ nan,  nan,  nan,  nan,  nan,  nan])
>>> np.nan in X[date][isin]
False

여기에도 해당 내용이 있다.


>>> np.isnan(np.min(X))
True

위 처럼 하라는거네

반응형
반응형

 

criterion

loss를 왠일인지 criterion이라고 부른다.

 

예를 들어 binary corss entropy loss를 설정하고 실제 그 값을 계산하고 싶으면

 

 


criterion = nn.BCELoss()  # Binary cross entropy: http://pytorch.org/docs/nn.html#bceloss
decision = D(input)
error = criterion(decision, Variable(torch.zeros(1)))

 

 

위처럼 하면 된다. 네트웍 output 과 label을 넣어주면 loss 계산

반응형
반응형

조건부확률

확률 공간 Ω에서의 두 사건 A, B에 대해서 P(B) > 0일 때 사건 B가 이미 일어났을 때 사건 A의 조건부 확률은

$P(A|B)=\frac{P(A \cap B)}{P(B)}$ 영국 베이즈(Bayes)가 발견.

$P(A \cap B)는 P(A, B)$로도 표시한다

> A와 B가 독립사건이면 $P(A|B)=P(A)$ 이므로, $P(A \cap B) = P(A)P(B)$임에 주의

다음 사건을 정의해 보자.

> A: 첫번째 주사위의 눈이 3 \\ B: 두번째 주사위의 눈이 1 \\ C: 두 주사위 눈의 합이 8

여기서 $P(A)=P(B)={\frac 16}$이고 $P(C)={\frac 5{36}}$이다. 이 중 몇 개의 사건은 동시에 일어날 수 있다. A와 C가 동시에 발생하려면 주사위 2의 눈의 수가 5이어야 하므로 두 사건의 곱사건으로 확률은 $P(A\cap C)={\frac 1{36}}$이다. 한편 B와 C는 동시에 일어나지 않으므로 $P(B\cap C)=0$이다.

여기서 주사위 2는 덮어두고 주사위 1의 눈이 3이 나왔다고 가정하자. 그러면 사건 C가 일어날 확률은 주사위 2의 눈이 반드시 5가 나와야 하므로 5/36이 아니라 1/6이 된다. 이를 사건 A가 일어났을 때 사건 C가 일어날 조건부 확률이라 하며 $P(C|A)$로 표현한다.

> A는 이미 일어난 상황이고, C는 아직 일어나지 않은 상황임에 주의!

한편 사건 A는 사건 B가 일어나는 데 영향을 주지 않는다. 이 때 두 사건은 서로 독립이며 다음 관계가 성립한다.

$ P(B|A)=P(B) $

심화: 베이지안

$P(A \cap B) = P(B) \times P(A|B)$ 이렇게도 쓸 수 있고 여기에 알기 쉽게 설명되어 있다.

반응형
반응형

 

class variable

이게 생각보다 오묘하다

위의 예제를 보면 일반적인 class level의 글로벌 변수 즉 static variable로 보인다.

클래스를 통한 assign은 모든 instance로 전파가 된다.

그런데 instance를 통해 assign을 하는순간 얘기가 달라진다.

위와 같이 instance 를 통한 assign은 전파가 안된다;;

http://stackoverflow.com/questions/68645/static-class-variables-in-python

This is different from C++ and Java, but not so different from C#, where a static member can't be accessed using a reference to an instance.

반응형
반응형

jibo: The World's First Social Robot for the Home

사진도 찍어주고, 등.. 누구..같은 로봇임

Pororo Story QA

Cafebot Scenario 2:복합 주문

카페도메인으로 한정하면 자연스러운 대화 가능?

최신트렌드: 리즈닝이 가능한 딥러닝

MS루이스, ibm왓슨

대화의 템플릿필요 (완전 프리한 모델은 아님)

질문: CNN활용은 안하나?

최근 미국 챗봇업체

RNN과 휴리스틱(룰) 섞어서 하는 추세

대화알고리즘은 매져가 어려움

발화의도는 매져가능

90%이상 분류성능 달성

설문으로 자연스러운지 설문했다. 5점가까운 점수 받았다.

딥러닝만으로는 성능향상이 어려워서

룰베이스랑 섞어서 하는게 요즘 추세다(데이터가 많으면 RNN만으로 될거다)

판별은 쉬운데 생성은 어렵다.

MDP노드를 딥러닝 히든노드로 대치하는게 최근 연구 추세

워드넷?

http://github.com/kimeunsol

eskim@bi.snu.ac.kr

상담용 챗봇의 데이터 사이즈가 작을경우는 불가능하다고 본다함

기계번역이나 챗봇의 기본구조는 P(R|S)를 구하는거고

인코더 RNN, 디코더 RNN을 사용한다.

디코더 BP시 인코더 파라미터까지 학습하도록 한다.

http://www.cleverbot.com/

99% 챗봇업체는 딥러닝 사용한다고 해도 실제로는 룰베이스다

실제는 구글이나 페북 제외하면 데이터 부족으로 할 수가 없다.

아주 일부 부분만 머신러닝 나머지는 룰베이스

https://github.com/Kyung-Min/Seq2Seq-TensorFlow

실습

https://147.46.219.138:9900/notebooks/30/BabySeq2Seq.ipynb

kmkim@bi.snu.ac.kr 김경민

반응형
반응형

 

coloring

• 먼저 파이선이던 뭐던 리눅스 터미널에서 텍스트 컬러링 하는데는 escape sequence 라는걸 쓴다.

http://shiroyasha.github.io/escape-sequences-a-quick-guide.html

• 위 링크 참조하자.

여기 보면 잘 정리되어 있다.

colorama라는게 맘에든다..

• 근데 외부라이브러리를 쓰는거라 플랫폼 적용시 고민해봐야한다.

• 결국 외부라이브러리 문제 때문에 여기나와있는걸로 적용함 ㅎㅎ

반응형
반응형

 

setUp, tearDown

• test 마다 수행되는 초기화 및 정리 작업은 setUp(), tearDown()안에 넣으면 된다.

• 이 경우 매번 test_ 로 시작하는 함수가 불리기 전후로 setUp()과 tearDown()이 계속 불린다.

*


import unittest


class DestStringMethods(unittest.TestCase):

    def setUp(self):
        print 'setUp is called!!!'

    def tearDown(self):
        print 'tearDown is called!!!'

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

 

• 제공되는 assertion. 그냥 assert 말고 다음거 써야한다.

 

반응형

+ Recent posts