레이블이 tensorflow인 게시물을 표시합니다. 모든 게시물 표시
레이블이 tensorflow인 게시물을 표시합니다. 모든 게시물 표시

2024년 7월 29일 월요일

PyTorch vs Tensorflow 코드 비교

목표는 파이토치로 모델을 구현하고 안드로이드용 모바일 버전 포팅 시에만 TFLite로 변환
공부하다 보니 근본적인 구조는 비슷한 것 같다.

간단한 모델 비교: PyTorch 버전

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# 데이터셋 생성
x_data = torch.randn(100, 10)
y_data = torch.randint(0, 2, (100, 1)).float()
dataset = TensorDataset(x_data, y_data)
dataloader = DataLoader(dataset, batch_size=10, shuffle=True)

# 모델 정의
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.layer = nn.Linear(10, 1)
    
    def forward(self, x):
        return torch.sigmoid(self.layer(x))

model = SimpleNN()

# 손실 함수 및 최적화
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 학습 루프
for epoch in range(100):
    for batch_x, batch_y in dataloader:
        # 순전파
        outputs = model(batch_x)
        loss = criterion(outputs, batch_y)
        
        # 역전파 및 최적화
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')

# 추론
with torch.no_grad():
    new_data = torch.randn(5, 10)
    predictions = model(new_data)
    print(predictions)


같은 모델의 Tensorflow 구현버전

import tensorflow as tf

# 데이터셋 생성
x_data = tf.random.normal([100, 10])
y_data = tf.random.uniform([100, 1], minval=0, maxval=2, dtype=tf.int32)

dataset = tf.data.Dataset.from_tensor_slices((x_data, y_data))
dataset = dataset.batch(10).shuffle(100)

# 모델 정의
class SimpleNN(tf.keras.Model):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.layer = tf.keras.layers.Dense(1, activation='sigmoid')
    
    def call(self, x):
        return self.layer(x)

model = SimpleNN()

# 손실 함수 및 최적화
criterion = tf.keras.losses.BinaryCrossentropy()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

# 학습 루프
for epoch in range(100):
    for batch_x, batch_y in dataset:
        with tf.GradientTape() as tape:
            outputs = model(batch_x)
            loss = criterion(batch_y, outputs)
        
        grads = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(grads, model.trainable_variables))
    
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.numpy():.4f}')

# 추론
new_data = tf.random.normal([5, 10])
predictions = model(new_data)
print(predictions)

2024년 5월 28일 화요일

Google Colab에 생긴 프롬프트 기반 코드 생성

어느샌가 Colab에도 프롬프트 입력란이 생겼길래 써봤음.
프롬프트만 잘 쓰면 간단한 코드는 거의 의도된대로 만들어준다.
그냥 생각없이 써봤는데 생성 결과가 잘 나와서 놀랐음.
라이선스 체크까지 해주는 건 아니므로 업무적 사용 시 주의 필요

[원본 예제]



[AI 생성코드]




2023년 6월 2일 금요일

[AI] 머신러닝 공부 추천도서 - 핸즈온 머신러닝 2판

핸즈온 머신러닝 (2판) - 오렐리앙 제롱 저 / 박해선 역


https://m.hanbit.co.kr/store/books/book_view.html?p_code=B7033438574


1판을 사서 봤었는데 흑백에서 컬러인쇄로 바뀌고 페이지 수는 거의 2배가 되었다.

1판 봤을 때는 배경지식도 부족한 상태여서 그런지 몰라도 머리에 잘 들어오지 않았는데 2판은 설명이 친절하게 느껴졌다. 그 동안 배경지식이 조금 더 생겨서 그런건지 책을 새로 써서 그런건지는 모름.

책이 무거우니 부피와 무게가 부담되시는 분들은 전자책으로 보는 것도 괜찮을 것 같음.

참고로 전자책 버전은 epub 방식은 아니고 pdf포맷임.


2판이 2020년에 나왔는데 벌써 3년이 지난 시점이지만, 예제를 돌리면서 실습해 본 결과 3판이 나온다 해도 당분간 충분히 쓸만할 것 같음.


예제들은 사이킷런으로 시작하지만 케라스와 텐서플로도 다루고 있다.

사이킷런은 잘 안써서 몰랐는데 생각보다 있을 기능 다 있고 기초 공부하는 데는 충분해 보인다.


유튜브에서 역자의 강의도 제공함

https://www.youtube.com/watch?v=kpuRasV_Q9k&list=PLJN246lAkhQjX3LOdLVnfdFaCbGouEBeb


What-If tool - 텐서플로 공부할 때 유용한 도구

구글에서 만든 유용한 툴


https://pair-code.github.io/what-if-tool/


What-If Tool (WIT)의 목표: 최소한의 코딩으로 머신러닝 모델을 검사


- 내가 만든 모델을 가지고 분석, 예측, 편향여부 등에 대해 테스트하고 예측결과를 시각화해서 쉽게 확인:

데이터를 직접 내 모델에 넣으면 그자리에서 시각화 결과를 보여줘서 간편하게 결과 예측이 가능

- Jupyter, Colab 지원


Datapoint editor 화면 - 각종 입력값 필드를 수정해보고 결과를 미리 볼 수 있음