<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>freshpear.log</title>
        <link>https://velog.io/</link>
        <description>성균관대학교 인공지능융합전공</description>
        <lastBuildDate>Tue, 14 Jan 2025 07:41:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>freshpear.log</title>
            <url>https://velog.velcdn.com/images/yoon_pear/profile/383fed5c-2d74-4295-96e6-020b0b0ade9c/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. freshpear.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yoon_pear" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[decorator 에 대해 알아보자! ]]></title>
            <link>https://velog.io/@yoon_pear/decorator-%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@yoon_pear/decorator-%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Tue, 14 Jan 2025 07:41:55 GMT</pubDate>
            <description><![CDATA[<p> 인공지능 모델 코드를 보다보면 마주하는 생소한 문법인 @ ,,, 즉 decorator 에 대해 정리하려고 한다. 임커밋님의 <a href="https://www.youtube.com/watch?v=3t26Z4vk7XE&amp;list=PL6R2CbVlhcYtnLsypcisMzDN344c1Conr&amp;index=5">https://www.youtube.com/watch?v=3t26Z4vk7XE&amp;list=PL6R2CbVlhcYtnLsypcisMzDN344c1Conr&amp;index=5</a>
 를 참고하였는데, 앞으로 이분 영상 보면서 조금씩 공부해보려한다.</p>
<pre><code class="language-python">def deco(f):
    print(&quot;deco!)
    return f

@deco
def double(num):
    return 2*num

print(double(41))</code></pre>
<p>을 실행하게 되면 &quot;deco!&quot; 와 82 가 순서대로 출력된다.</p>
<h3 id="1-알아야할-개념">1. 알아야할 개념</h3>
<p>우선 함수는 &quot;객체화&quot; 되어 있기 때문에 <strong><em>함수를 변수처럼 사용할 수 있다</em></strong>는 것을 알아야 데코레이터를 이해할 수 있다.</p>
<p>예를 들면,</p>
<ol>
<li>함수를 보통의 변수처럼 dictionary 의 value 로 사용할 수 있다.
<img src="https://velog.velcdn.com/images/yoon_pear/post/472cd93f-87b7-429d-a189-2a27c0ded85b/image.png" alt=""></li>
<li>함수를 다른 함수의 인자로 쓰도록 할 수 있다.<pre><code class="language-python">def calculation(func,a,b) : 
 return func(a,b)
</code></pre>
</li>
</ol>
<p>print(calculation(add,41,3))</p>
<pre><code>이 가능하다. 여기서는 func 인자로 add 가 쓰여지고 있다. 즉 return add(41,3) 이  되는 것이다.

### 2.작동원리 

![](https://velog.velcdn.com/images/yoon_pear/post/9bb793c4-00ea-4c4a-960c-f57347e7e576/image.png)

즉 왼쪽 코드는 오른쪽 코드처럼 작동한다.
@deco 를 붙이게 되면, double 함수가 deco 의 인자로 넘겨져 deco 함수가 먼저 실행이 되고, return f 로 double 함수가 반환되는 것이다.

다시 말하면, @deco 를 double 함수 위에 붙인다는 것은 
```python
double=deco(double)</code></pre><p>를 하는 것과 같고, 이를 해석하면 deco 함수에 double 를 전달하여 기능이 추가된 함수 객체를 만들고, 이를 다시 double 변수로 바인딩하는 것이다.</p>
<p>결과적으로 </p>
<pre><code class="language-python">print(double(41)) </code></pre>
<p>을 실행하면 </p>
<p>&quot;double&quot; 에 &quot;deco&quot; 함수에서 추가한 기능이 수행되고, double 함수가 수행된다. 이때, double 함수 자체는 변화하지 않는다.</p>
<pre><code class="language-python">def deco(f):
    print(&quot;deco!&quot;)
    return 41</code></pre>
<p>만약 위 코드처럼 deco 함수가 input 인자를 그대로 return 하지 않는다면, double 은 더이상 함수가 아니라 41이 되어버리기 때문에 int object 가 되고, 함수로 사용할 수가 없다.</p>
<p>다음 post 에서는 decorator 에 @deco(3) 처럼 인자를 사용하는 경우를 보려고 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Dacon 후기]]></title>
            <link>https://velog.io/@yoon_pear/Dacon-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@yoon_pear/Dacon-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Thu, 31 Oct 2024 05:30:46 GMT</pubDate>
            <description><![CDATA[<p><a href="https://dacon.io/competitions/official/236382/leaderboard">https://dacon.io/competitions/official/236382/leaderboard</a></p>
<p>오랜만에 dacon 대회에 참여하게 되었다!
h&amp;e 사진을  input 으로 받아 3467개의 유전자의 발현정보를 예측하는 대회였는데, metric 때문에 쉽지 않은 대회였다..순위권 안에는 들지 못했지만 기록할 겸 올린다!!</p>
<p><img src="https://velog.velcdn.com/images/yoon_pear/post/4ed6ef46-1223-4ca5-ae4a-cd17d04b409d/image.png" alt=""></p>
<p>유전자 리스트를 모르는데 성능을 어떻게 높이나요...ㅠㅠ </p>
<p>아무튼 주어진 정보 내에서 최대한 성능을 높이려고 해보았다.</p>
<p>우선 평가 산식을 보면 알 수 있듯이 상관계수가 매우 중요하기 때문에 loss를 mseloss 이외에 상관계수를 반영할 수 있는 loss 를 사용하고자 했다.</p>
<ol>
<li><p>-pearsoncorrloss
 <img src="https://velog.velcdn.com/images/yoon_pear/post/2046a4b1-50b1-413a-8079-b11bd4d16d2f/image.png" alt=""></p>
<p> 사실 이 코드는 팀원이 짠거긴한데 나는 1-pearsoncorr 가 맞지않나...라고 생각했다...-1<del>1 범위니까 1에서 빼줘야  loss 범위가 0</del>2 가 되는거 아닌가?</p>
</li>
<li><p>mse+lambda(1-pearson corr)
 <img src="https://velog.velcdn.com/images/yoon_pear/post/9f728bf4-40b8-40ed-b70b-c9364b1de5cb/image.png" alt=""></p>
</li>
<li><p>1-pearsoncorr loss
 <img src="https://velog.velcdn.com/images/yoon_pear/post/bb847f26-f76c-492e-9ab7-23715c75f080/image.png" alt=""></p>
</li>
</ol>
<p>등 여러가지 loss 를 시도해봤다. </p>
<p>모델도 resnet50 이 baseline 이였는데, 
<img src="https://velog.velcdn.com/images/yoon_pear/post/31c22e4f-d1a4-48bd-98cd-aa8ed102c010/image.png" alt="">
이렇게 모델을 바꿔가며 train 해보기도 했다. resnet 152가 가장 성능이 좋았다.</p>
<p>처음엔 pretrain 된 weight 을 불러와서 freeze 하고 학습시켰다가 이후에는 freeze 를 전혀 하지 않고 학습시켰는데, 이게 제일 성능이 좋았다.</p>
<p>추가적으로 output 인 gene 의 개수가 너무 많기 때문에 마지막 출력 레이어이전에 fc layer 나 mlp layer 를 추가해보기도 했는데, 성능에는 영향이 없었던 것으로 기억한다.</p>
<p>결과적으로는 높은 등수는 아니였지만, 나름 재미가 있었던 것 같다. 특히 이전과 다르게 팀원중에 서버가 있는 친구가 있어서 이것저것 실험해보기 훨씬 좋았다!!(<del>예전에 colab 으로 했을때는 코드 한번 돌릴때가 스트레스였다</del>😡) 중간고사랑 기간이 겹쳐버려서 아쉬움이 많이 남는다. 다음에 좋은 대회가 있으면 또 나가는걸로~!</p>
]]></description>
        </item>
    </channel>
</rss>