quilt code

[AI] tensorflow (2) 본문

daily/AI

[AI] tensorflow (2)

김뱅쇼 2023. 4. 19. 21:30

홀짝 예제 

 

1. day13


1. holjjak_mnist


** user가 무조건 지는 (com이 이기는) 게임 **

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import tensorflow as tf
import numpy as np
 
 
 
x_train = [
            [1,0],  #홀
            [0,1],  #짝
]
 
# y_train = [0,1]  #x_train [1,0]이면 y_train 0, x_train [0,1]이면 y_train 1  / x_train에 대한 정답
y_train = [1,0]  # y_train이 [1,0]이면 무조건 짐 / 반대의 결과가 나오기 때문 
                
 
x_test = [
            [1,0]  #홀
        
]
 
x_train_np = np.array(x_train, dtype='f')   #모델의 입맛에 맞추기 위해 실수로 바꿈 / 배열은 모델안에 들어갈 수 없어서 numpy로 바꿔줌
y_train_np = np.array(y_train, dtype='f')
 
x_test_np = np.array(x_test, dtype='f')
 
 
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(2,)),        #입력노드  / 
    tf.keras.layers.Dense(512, activation=tf.nn.relu), #은닉층
    tf.keras.layers.Dense(2, activation=tf.nn.softmax) #출력노드   / 2인 이유? 0이랑 1만 있으니까 2!
])
 
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
 
model.fit(x_train_np, y_train_np, epochs=5#epochs 지우면 기본값으로
 
test_loss, test_acc = model.evaluate(x_train_np, y_train_np)
 
#h5 저장
model.save("holjjak.h5")
#예측
predict = model.predict(x_test_np)
print(predict)
 
#숙제: 홀짝 h5파일 홀이면 1,0 짝이면 0,1 argmax 해서 0이면 홀로 세팅 1이면 짝으로 세팅
cs

x_train = [
            [1,0],  #홀
            [0,1],  #짝
]

y_train = [1,0]   : x_train에서 [1,0]은 홀, [0,1]은 짝이라고 학습을 시킴. y_train(결과)에서는 [1,0](홀) 일때 1, [0,1](짝)일때 0을 가져오게 함


x_test = [
            [1,0]  #홀     : 홀만 연습시킴 
        
]

x_train_np = np.array(x_train, dtype='f')   #모델의 입맛에 맞추기 위해 실수로 바꿈 / 배열은 모델안에 들어갈 수 없어서 numpy로 바꿔줌
y_train_np = np.array(y_train, dtype='f')

x_test_np = np.array(x_test, dtype='f')


model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(2,)),        #입력노드. 입력이 두개
    tf.keras.layers.Dense(512, activation=tf.nn.relu),  #은닉층
    tf.keras.layers.Dense(2, activation=tf.nn.softmax) #출력노드   / 2인 이유? 0이랑 1만 있으니까 2!
])


model.save("holjjak.h5")  : holjjak이름을 가진 h5 파일을 저장 

predict = model.predict(x_test_np)  : 예측하기 


2. holjjak_ai



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import numpy as np
import tensorflow as tf
import keras
 
 
mine=""
com = ""
result = ""   #선언부 
 
mine = input("홀/짝을 입력하세요.")
 
x_test = []
 
#학습시킬때 약속함 / 바꿀수도 있음 / 학습시키기 나름... 
if mine == "홀":
    x_test.append([1,0])
 
else
    x_test.append([0,1])
    
x_test_np = np.array(x_test)
 
#학습한걸 가져옴 -> 무조건 지고 싶으면 학습을 다시 시켜야함 (무조건 지도록)
model = keras.models.load_model("holjjak.h5")
predict = model.predict(x_test_np)
inx_hj = np.argmax(predict[0])
 
if inx_hj == 0:
    com = "홀"
else:
    com = "짝"
    
    
if com == mine :
    result = "win"
else:
    result = "lose"
    
print("나:",mine)
print("컴:",com)
print("결과:",result)
cs

if mine == "홀":
    x_test.append([1,0])   : 입력된 값이 홀이면 x_test에서 [1,0]을 가져옴. test 데이터를 넣을 때 numpy 타입으로...
                                        *append: 배열의 값을 넣는 기능

else:                                  
    x_test.append([0,1])   : 입력된 값이 짝이면 x_test에서 [0,1]을 가져옴 




3.holjjak_mnist_load



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import tensorflow as tf
import numpy as np
import keras
 
 
 
x_train = [
            [1,0],  #홀
            [0,1],  #짝
]
y_train = [0,1]  #x_train [1,0]이면 y_train 0, x_train [0,1]이면 y_train 1  / x_train에 대한 정답
 
 
x_test = [
            [1,0]  #홀
        
]
 
x_train_np = np.array(x_train, dtype='f')   #모델의 입맛에 맞추기 위해 실수로 바꿈 / 배열은 모델안에 들어갈 수 없어서 numpy로 바꿔줌
y_train_np = np.array(y_train, dtype='f')
 
x_test_np = np.array(x_test, dtype='f')
 
 
model = keras.models.load_model("holjjak.h5")
predict = model.predict(x_test_np)
inx_hj = np.argmax(predict[0])
 
print(predict)
 
#숙제: 홀짝 h5파일 홀이면 1,0 짝이면 0,1 argmax 해서 0이면 홀로 세팅 1이면 짝으로 세팅
cs

inx_hj = np.argmax(predict[0]) :  배열 중에서 가장 큰 값의 index를 가져오는건데 얘는 왜 0...? -> 테스트 데이터 중에 첫번째(0번째)의 값의 인덱스를 가져옴. 데이터가 여러개 있을 경우 어떤 데이터를 가져와야할지 몰라서 첫번쨰 데이터를 가져옴 

 

 

2. day14

 


1. holjjak_mnist



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import tensorflow as tf
import numpy as np
 
 
 
x_train = [
            [0],  #홀
            [1],  #짝
]
 
y_train = [0,1]  # y_train이 [1,0]이면 무조건 짐 / 반대의 결과가 나오기 때문 
                
 
x_test = [
            [0]  #홀
        
]
 
x_train_np = np.array(x_train, dtype='f')   #모델의 입맛에 맞추기 위해 실수로 바꿈 / 배열은 모델안에 들어갈 수 없어서 numpy로 바꿔줌
y_train_np = np.array(y_train, dtype='f')
 
x_test_np = np.array(x_test, dtype='f')
 
 
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(1,)),        #입력노드  / 
    tf.keras.layers.Dense(20, activation=tf.nn.relu), #은닉층
    tf.keras.layers.Dense(20, activation=tf.nn.relu), 
    tf.keras.layers.Dense(2, activation=tf.nn.softmax) #출력노드   / 2인 이유? 0이랑 1만 있으니까 2!
])
 
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
 
model.fit(x_train_np, y_train_np, epochs=10000#epochs 지우면 기본값으로
 
test_loss, test_acc = model.evaluate(x_train_np, y_train_np)
 
#h5 저장
model.save("holjjak.h5")
#예측
predict = model.predict(x_test_np)
print(predict)
 
#숙제: 홀짝 h5파일 홀이면 1,0 짝이면 0,1 argmax 해서 0이면 홀로 세팅 1이면 짝으로 세팅
cs

x_train = [
            [0],  #홀
            [1],  #짝     **입력하는 곳 하나 
]  

y_train = [0,1]


model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(1,)),        #입력노드  / 
    tf.keras.layers.Dense(20, activation=tf.nn.relu), #은닉층
    tf.keras.layers.Dense(20, activation=tf.nn.relu), 
    tf.keras.layers.Dense(2, activation=tf.nn.softmax) #출력노드   / 2인 이유? 0이랑 1만 있으니까 2!
])       
 




2. holjjak_ai



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import numpy as np
import tensorflow as tf
import keras
from datetime import datetime
 
t1 = datetime.now()
mine=""
com = ""
result = ""   #선언부 
 
mine = input("홀/짝을 입력하세요.")
 
x_test = []
 
#학습시킬때 약속함 / 바꿀수도 있음 / 학습시키기 나름... 
if mine == "홀":
    x_test.append([0])
 
else
    x_test.append([1])
    
x_test_np = np.array(x_test)
 
t2 = datetime.now()
 
#학습한걸 가져옴 -> 무조건 지고 싶으면 학습을 다시 시켜야함 (무조건 지도록)
model = keras.models.load_model("holjjak.h5")
t3 = datetime.now()
 
predict = model.predict(x_test_np)
inx_hj = np.argmax(predict[0])
 
if inx_hj == 0:
    com = "홀"
else:
    com = "짝"
    
    
if com == mine :
    result = "win"
else:
    result = "lose"
    
print("나:",mine)
print("컴:",com)
print("결과:",result)
 
t4 = datetime.now()
 
print("t2-t1",t2-t1)
print("t3-t2",t3-t2)
print("t4-t3",t4-t3)
 
 
 
 
 
 
cs

t1 = datetime.now()
t2 = datetime.now()
t3 = datetime.now()
t4 = datetime.now()
print("t2-t1",t2-t1)
print("t3-t2",t3-t2)
print("t4-t3",t4-t3)
: 시간 출력 




 

 

 

 

'daily > AI' 카테고리의 다른 글

[AI] OpenCV  (0) 2023.04.22
[AI] tensorflow (3)  (0) 2023.04.22
[AI] cifar10  (0) 2023.04.20
[AI] tensorflow (1)  (0) 2023.04.19
[AI] numpy  (0) 2023.04.17