
如果你因为年收入或个性而输给他,
我希望你至少能赢。
因此,
这一次,我们将使用TensorFlow,使AI赢得希卡金邦邦肯与
图像分类器。
要做什么准备
- Google Colaboratory(※Jupyter Notebook也OK)
- 分发源代码(*如果您只想从头开始,则不需要)
如何使AI赢得希卡金邦邦肯
让AI学习健健
首先,下载一个 zip 文件,该文件中有 Janken 的图像。
!wget --no-check-certificate
https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps.zip
-O /tmp/rps.zip
!wget --no-check-certificate
https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps-test-set.zip
-O /tmp/rps-test-set.zip
`
–2022-09-19 05:51:56– https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps.zip
Resolving storage.googleapis.com (storage.googleapis.com)… 172.217.194.128, 142.251.10.128, 142.251.12.128, …
Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.194.128|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 200682221 (191M) [application/zip]
Saving to: ‘/tmp/rps.zip’
/tmp/rps.zip 100%[===================>] 191.38M 40.7MB/s in 4.7s
2022-09-19 05:52:02 (40.7 MB/s) – ‘/tmp/rps.zip’ saved [200682221/200682221]
–2022-09-19 05:52:02– https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps-test-set.zip
Resolving storage.googleapis.com (storage.googleapis.com)… 172.217.194.128, 142.251.10.128, 142.251.12.128, …
Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.194.128|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 29516758 (28M) [application/zip]
Saving to: ‘/tmp/rps-test-set.zip’
/tmp/rps-test-set.z 100%[===================>] 28.15M –.-KB/s in 0.1s
2022-09-19 05:52:02 (204 MB/s) – ‘/tmp/rps-test-set.zip’ saved [29516758/29516758]
`
解压缩 zip 并将其保存到 /tmp/
目录。
import os
import zipfile
local_zip = '/tmp/rps.zip'
zip_ref = zipfile. ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp/')
zip_ref.close()
local_zip = '/tmp/rps-test-set.zip'
zip_ref = zipfile. ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp/')
zip_ref.close()
将学习用的 Janken 图像分类为“古
”、“乔基
”和“Pper
”。
rock_dir = os.path.join('/tmp/rps/rock')
paper_dir = os.path.join('/tmp/rps/paper')
scissors_dir = os.path.join('/tmp/rps/scissors')
print('total training rock images:', len(os.listdir(rock_dir)))
print('total training paper images:', len(os.listdir(paper_dir)))
print('total training scissors images:', len(os.listdir(scissors_dir)))
rock_files = os.listdir(rock_dir)
print(rock_files[:10])
paper_files = os.listdir(paper_dir)
print(paper_files[:10])
scissors_files = os.listdir(scissors_dir)
print(scissors_files[:10])
total training rock images: 840 total training paper images: 840 total training scissors images: 840 ['rock01-027.png', 'rock05ck01-108.png', ' rock05ck01-090.png', 'rock01-040.png', 'rock02-108.png', 'rock02-022.png', 'rock01-060.png', 'rock07-k03-061.png', 'rock06ck02-032.png', 'rock03-069.png'] ['paper05-114.png', 'paper03-099.png', 'paper06-011.png', 'paper07-053.png ', 'paper03-040.png', 'paper07-040.png', 'paper05-082.png', 'paper07-116.png', 'paper01-041.png', ' paper07-035.png'] ['scissors04-034.png', 'testscissors01-033.png', 'testscissors03-058.png', 'testscissors01-087.png', ' testscissors03-044.png', 'testscissors01-040.png', 'scissors04-080.png', 'scissors03-069.png', 'testscissors03-088.png', 'scissors04-038.png']
绘制。
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
pic_index = 2
next_rock = [os.path.join(rock_dir, fname)
for fname in rock_files[pic_index-2:pic_index]]
next_paper = [os.path.join(paper_dir, fname)
for fname in paper_files[pic_index-2:pic_index]]
next_scissors = [os.path.join(scissors_dir, fname)
for fname in scissors_files[pic_index-2:pic_index]]
for i, img_path in enumerate(next_rock+next_paper+next_scissors):
img = mpimg.imread(img_path)
plt.imshow(img)
plt.axis('Off')
plt.show()

学习。
import tensorflow as tf
import keras_preprocessing
from keras_preprocessing import image
from keras_preprocessing.image import ImageDataGenerator
TRAINING_DIR = "/tmp/rps/"
training_datagen = ImageDataGenerator(
rescale = 1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
VALIDATION_DIR = "/tmp/rps-test-set/"
validation_datagen = ImageDataGenerator(rescale = 1./255)
• 创建学习数据
train_generator = training_datagen.flow_from_directory(
TRAINING_DIR,
target_size=(150,150),
class_mode='categorical',
batch_size=126
)
• 创建验证数据
validation_generator = validation_datagen.flow_from_directory(
VALIDATION_DIR,
target_size=(150,150),
class_mode='categorical',
batch_size=126
)
• 定义神经网络
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(3, activation='softmax')
])
• 摘要
model.summary()
• 编译神经网络
model.compile(loss = 'categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
• 学习
history = model.fit(train_generator, epochs=25, steps_per_epoch=20, validation_data = validation_generator, verbose = 1, validation_steps=3)
model.save("rps.h5")
学习结束了。
与希卡金合作,让 AI 获胜
现在上传文件,并输出你的手赢得希卡金。
import numpy as np
from google.colab import files
from keras.preprocessing import image
uploaded = files.upload()
for fn in uploaded.keys():
path = fn
img = image.load_img(path, target_size=(150, 150))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=10)
hikakin_result = np.array(classes[0])
paper = np.array([1, 0, 0])
rock = np.array([0, 1, 0])
scissors = np.array([0, 0, 1])
if hikakin_result[0] == paper[0]:
print("✌")
if hikakin_result[1] == rock[1]:
print("🖐")
if hikakin_result[2] == scissors[2]:
print("✊")
让我们做上述。
我试着在第十轮中打架。
Round 1


✊ AI 已发出。
因此,第一个赔根是AI的胜利。
Round 2


🖐 AI 已发出。
因此,第二场是AI的胜利。
Round 3


🖐 AI 已发出。
因此,第3号是爱子。
Round 4


✊ AI 已发出。
因此,第 4 个角色是 AI 的失败者。
当 AI 被打出来时,它很弱吗?
Round 5
第三次诚实?


✌ AI 已发出。
因此,第 5 行是 AI 的胜利。
最后,我们赢得了标准杆。
Round 6


🖐 AI 已发出。
因此,第 6 行是 AI 的胜利。
Round 7


✌ AI 已发出。
因此,第 7 行是 AI 的胜利。
Round 8


✌ AI 已发出。
因此,第 8 行是 AI 的失败。
我不应该被陨石撞倒。
Round 9


✌ AI 已发出。
因此,第9号是AI的胜利。
Round 10


🖐 AI 已发出。
因此,第 10 个角色是 AI 的失败者。
结果
Round | AI | 希卡金 |
---|---|---|
1 | 是的,我是 | |
2 | 是的,我是 | |
三。 | – | – |
4个 | 是的,我是 | |
5 | 是的,我是 | |
六。 | 是的,我是 | |
七。 | 是的,我是 | |
八。 | 是的,我是 | |
九。 | 是的,我是 | |
十。 | 是的,我是 |
AI 以 70% 的赔率赢得希卡金邦肯。
深度技术杂志在这里“深度杂志”