til์ ๋ด๊ฐ ์ด๊ฑธ ์๋ ๊ฒ์ ์ฆ๋ช
ํ๊ธฐ ์ํด์, ์๊น๋จน๊ธฐ ์ํ ํ๋์ ๋๊ตฌ
์ฑ์ฅ๊ณผ์ ์ ๋ณผ ์ ์์ด์ ์
๋ฌด ์ฑํฅ, ์ฑ์ค๋, ํ์
๊ฐ๋ฅ์ฑ์ ๋ณผ ์ ์๋ค
- ์ด๋ค ๋ฌธ์ ๊ฐ ์์๋์ง
- ๋ด๊ฐ ๋ญ ๋ชฐ๋๋์ง(๋ด๊ฐ ์๋ํด ๋ณธ ๊ฒ)โญ
- ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง
- ๋ญ ์์๋์งโญ
wil์ til์ ํ๊ณ
- ์ด๋ฒ์ฃผ ์๊ฒ ๋ ์ ์ ๋ฆฌ
- ๋ค์์ฃผ ๋ชฉํ ์ธ์ฐ๊ธฐ
- ์ด๋ฒ์ฃผ ๋ชฉํ ๋ฌ์ฑ์ฌ๋ถ
ํด์ฑ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ์ ๋ ๋ก๊ทธ์ธํ ๋ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ํด์ฑ๋ ๊ฐ์ด๋ ๋น๊ตํด์ ๋ก๊ทธ์ธํ๋ ๊ฒ
1.ํ๋ก์ ํธ ํด๋๋ฅผ ์์ฑํ๊ณ ๊ฐ์ ํ๊ฒฝ์ ์์ฑ ๋ฐ ์คํ ํด์ฃผ์ธ์
2. django ํจํค์ง๋ฅผ ์ค์นํ๊ณ ,requirements.txt์ ์ค์น ๋ ํจํค์ง๋ฅผ ์ ์ฅํด์ฃผ์ธ์
3. sparta๋ผ๋ ์ด๋ฆ์ผ๋ก django ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ฃผ์ธ์
4. github์ ์๋ก์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์
5. .gitignore ์ค์ ํ sparta ํ๋ก์ ํธ๋ฅผ ํธ์ํด์ฃผ์ธ์
6. user๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ด๋ํด์ฃผ์ธ์
7. user ์ฑ์ ๋ง๋ค๊ณ settings.py์ ๋ฑ๋กํด์ฃผ์ธ์
8. ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํด User ํ ์ด๋ธ์ ์์ฑํด์ฃผ์ธ์
- AbstractUser ์์
- ํธ๋ํฐ๋ฒํธ, ์ฃผ์ ํ๋ ์ถ๊ฐ
- ์ฒจ๋ถ ๋ signup.html ํ ํ๋ฆฟ์ ํ์ฉํด /signup ๊ฒฝ๋ก๋ก ์ ์ํ ๊ฒฝ์ฐ ํ์๊ฐ์ ํ์ด์ง๋ฅผ ๋์์ฃผ๊ณ ํ์๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ์ธ์(ํ์๊ฐ์ ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก redirection ํด์ฃผ์ธ์)
- ์ฒจ๋ถ ๋ login.html ํ ํ๋ฆฟ์ ํ์ฉํด /login ๊ฒฝ๋ก๋ก ์ ์ํ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋์์ฃผ๊ณ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ์ธ์(๋ก๊ทธ์ธ ์ home ํ์ด์ง๋ก redirection ํด์ฃผ์ธ์)
- ์ฒจ๋ถ ๋ home.html ํ ํ๋ฆฟ์ ํ์ฉํด /home ๊ฒฝ๋ก๋ก ์ ์ํ ๊ฒฝ์ฐ ๋ฉ์ธ ํ์ด์ง๋ฅผ ๋์์ฃผ๊ณ ๋ก๊ทธ์ธ ํ์ง ์์ ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ ์ํ๋๋ก ํด์ฃผ์ธ์
- ์์ ๋ด์ฉ์ user ๋ธ๋์น์ ํธ์ํ๊ณ , ๋ฉ์ธ ํ๋ ์น์ Pull Request๋ฅผ ์์ฒญํด์ฃผ์ธ์
- main ๋ธ๋์น์์ user ๋ธ๋์น์ ์์ ๋ด์ฉ์ ๋จธ์งํด์ฃผ์ธ์
<form method="post" action ="/signup/">
Page not found (404)
Request Method: POST
Request URL: http://127.0.0.1:8000/signup/signup/
โ action ์์ ๋ค์ด๊ฐ๋ url์ /๊ฐ ์์ ๊ผญ ์์ด์ผํ๋ค ๊ทธ๋ฆฌ๊ณ ๊ผญ ์๋ก๊ณ ์นจ ํ์..
์๋๋ฉด ์ฃผ์๋ฅผ ๋ชฝ๋
๋ค ์ ์ด์ค๋ ๋๋ค โ http://127.0.0.1:8000/signup
from django.shortcuts import render,redirect
from .models import User
from django.contrib.auth import login, authenticate
# Create your views here.
def signup(request):
if request.method == 'GET':
return render(request,'signup.html')
#์ง๊ธ์ ์กฐ๊ฑด๋ฌธ ์์ ๋ฆฌํด์ด์์ผ๋๊น ๋ค์์๋ ์กฐ๊ฑด๋ฌธ์ด if์ด๋ elif๋ ์๊ด์์ง๋ง
# ๋ฆฌํด์ด ์์ผ๋ฉด if๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ปจ๋ฒค์
elif request.method == 'POST':
user = User()
user.username = request.POST.get('username')
# password = request.POST.get('password') ์ํธํ๊ฐ ์๋จ
user.set_password(request.POST.get('password'))
user.phone = request.POST.get('phone')
user.address = request.POST.get('address')
# User.objects.create_user(username=username,password=password,phone=phone,address=address)
# -> ์๋ username, password๋ง ์
๋ ฅํด๋ ๋๋ค
user.save()
return redirect('/login/') # ์์๋ ์ฌ๋์ ์์ด์ผํจ
#redirect('user:login')๋ ๊ฐ๋ฅ ๋ชจ๋ธ์ url name์ ๊ฐ์ง๊ณ ๋ฆฌ๋ค์ด๋ ํธํจ
def log_in(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request,username=username,password=password)
if user is not None:
login(request,user)
return redirect('/home')
elif request.method == 'GET':
return render(request,'login.html')
โlogin() expected 1 arguments but got2
โ ๋ด์ฅํจ์ login ์ ๋ถ๋ฌ์์ผํ๋๋ฐ ๋ด๊ฐ ์ ์ํ ๋ก๊ทธ์ธํจ์๋ ์ด๋ฆ์ด ๊ฐ์์ ์ค๋ฅ ๋ฐ์ ์ด๋ฆ์ด ๊ฐ์์ง ๊ผญ ์ฒดํฌํ์ใ
def home(request):
user= request.user.is_authenticated
#if request.user.is_anonymous๋ ๋ฐ๋
if user:
return render(request,'home.html')
else:
return redirect('/login/') # ํ์ด์ง ์ด๋์ ํ๋ผ๊ณ ํ์ผ๋๊น redirect
# return render(request,'login.html') # ์ฃผ์๊ฐ ์๋ฐ๋
https://github.com/hyojine/1014test.git
โ ์๋ ์ฝ๋/ ์จ๋จธ๋ฆฌ์ dropout~dense_1๊น์ง๊ฐ ์ถ๋ ฅ ๋ ์ด์ด๋ฅผ ๋ง์๋๋ก ํ๋ํด์ฃผ๋ ๋ถ๋ถ
x = base_model.output
x = Dropout(rate=0.25)(x)
x = Dense(256, activation='relu')(x)
output = Dense(131, activation='softmax')(x)
softmax: ๋คํญ๋ถ๋ฅ - categorical_crossentropy๋ ์ธํธ
-ํ์ต
callbacks=[ ModelCheckpoint('model.h5', monitor='val_acc', verbose=1, save_best_only=True)] : ์ฝ๋ฐฑ์ ๋ชจ๋ธ์ฒดํฌํฌ์ธํธ๋ฅผ ์ ์ํ๊ฒ๋๋ฉด model.h5์ ๋ชจ๋ธ์ ์จ์ดํธ์ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค ๋ชจ๋ํฐ๋ ๋ฒจ๋ฆฌ๋ฐ์ด์
์ดํ๋ฌ์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ ํ๋๋ง(save_best_only=True)์ ์ ์ฅํ๊ฒ ๋๋ค verbose=1: ์ ์ฅํ๋ฉด ํ๋ค๊ณ ์ถ๋ ฅํด๋ผ
-ํ
์คํธ
argmax: ์ํซ์ธ์ฝ๋ฉ๋ ๊ฐ์ ์๋ ๋ผ๋ฒจ๊ฐ์ผ๋ก ๋๋๋ฆด ๋ ์ฌ์ฉ
classes[np.argmax(test_label)]: ํด๋์ค์ ์ด๋ฆ์ ๋ฝ์๋
ground truth: ์ ๋ต๊ฐ
PR: ์์ธก๊ฐ
from tensorflow.keras.applications import ResNet50
input = Input(shape=(224, 224, 3))
base_model = ResNet50(weights='imagenet', include_top=False, input_tensor=input, pooling='max')
output = Dense(131, activation='softmax')(x)
โ ์ฌ๊ธฐ์ 131์ ์ด์ ์ค์ต์์ ์ฐ๋ ๊ฐ์ธ๋ฐ ๊ทธ๋๋ก ์ฐ๋ฉด ์ด๋กํจ.. ๋ฏธ์ณค๋๋ด.. 6์ผ๋ก ๋ฐ๊พธ๊ณ ํด๊ฒฐ โโ
try to check the number of classes, which will input to the FCC.
predictions = Dense(len(folders),name='output', activation="softmax")(x)check the len(folders) to be correct
์ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๊ณต์ ๋ฌธ์๋ฅผ ์ ์ฐพ์๋ณด์ ์ ค ์ ํํจ
https://docs.djangoproject.com/en/4.1/topics/auth/default/