From 8d58790f31cdfcaeeed58e5389871a6bf59aed23 Mon Sep 17 00:00:00 2001 From: tengge1 <930372551@qq.com> Date: Sat, 31 Aug 2019 20:48:50 +0800 Subject: [PATCH] intro_to_cnns --- ShadowEditor.AI/README.md | 1 + .../tensorflow/basic/hub_with_keras.py | 52 +++++++++++++++++++ .../tensorflow/basic/intro_to_cnns.py | 37 +++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 ShadowEditor.AI/tensorflow/basic/hub_with_keras.py create mode 100644 ShadowEditor.AI/tensorflow/basic/intro_to_cnns.py diff --git a/ShadowEditor.AI/README.md b/ShadowEditor.AI/README.md index 3973d842..4d6fbe47 100644 --- a/ShadowEditor.AI/README.md +++ b/ShadowEditor.AI/README.md @@ -37,6 +37,7 @@ pip install tensorflow-gpu==2.0.0-rc0 8. tensorflow/basic/basic_regression.py: 线性回归 9. tensorflow/basic/overfit_and_underfit.py: 过拟合和欠拟合,准确度:99.99% 10. tensorflow/basic/save_and_restore_models.py: 保存和恢复模型 +11. tensorflow/basic/intro_to_cnns.py: 卷积神经网络 ## 相关地址 diff --git a/ShadowEditor.AI/tensorflow/basic/hub_with_keras.py b/ShadowEditor.AI/tensorflow/basic/hub_with_keras.py new file mode 100644 index 00000000..b420a3dd --- /dev/null +++ b/ShadowEditor.AI/tensorflow/basic/hub_with_keras.py @@ -0,0 +1,52 @@ +from __future__ import absolute_import, division, print_function, unicode_literals + +import matplotlib.pylab as plt + +import tensorflow as tf + +import tensorflow_hub as hub + +from tensorflow.keras import layers + +classifier_url ="https://hub.tensorflow.google.cn/google/tf2-preview/mobilenet_v2/classification/2" #@param {type:"string"} + +IMAGE_SHAPE = (224, 224) + +classifier = tf.keras.Sequential([ + hub.KerasLayer(classifier_url, input_shape=IMAGE_SHAPE+(3,)) +]) + +import numpy as np +import PIL.Image as Image + +grace_hopper = tf.keras.utils.get_file('image.jpg','https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg') +grace_hopper = Image.open(grace_hopper).resize(IMAGE_SHAPE) + +grace_hopper = np.array(grace_hopper)/255.0 + +result = classifier.predict(grace_hopper[np.newaxis, ...]) + +predicted_class = np.argmax(result[0], axis=-1) + +labels_path = tf.keras.utils.get_file('ImageNetLabels.txt','https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt') +imagenet_labels = np.array(open(labels_path).read().splitlines()) + +plt.imshow(grace_hopper) +plt.axis('off') +predicted_class_name = imagenet_labels[predicted_class] +_ = plt.title("Prediction: " + predicted_class_name.title()) + +# data_root = tf.keras.utils.get_file( +# 'flower_photos','https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz', +# untar=True) + +# image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255) +# image_data = image_generator.flow_from_directory(str(data_root), target_size=IMAGE_SHAPE) + +# for image_batch, label_batch in image_data: +# print("Image batch shape: ", image_batch.shape) +# print("Label batch shape: ", label_batch.shape) +# break + +# result_batch = classifier.predict(image_batch) + diff --git a/ShadowEditor.AI/tensorflow/basic/intro_to_cnns.py b/ShadowEditor.AI/tensorflow/basic/intro_to_cnns.py new file mode 100644 index 00000000..b75de5e5 --- /dev/null +++ b/ShadowEditor.AI/tensorflow/basic/intro_to_cnns.py @@ -0,0 +1,37 @@ +from __future__ import absolute_import, division, print_function, unicode_literals + +import tensorflow as tf + +from tensorflow.keras import datasets, layers, models + +(train_images, train_labels), (test_images, + test_labels) = datasets.mnist.load_data() + +train_images = train_images.reshape((60000, 28, 28, 1)) +test_images = test_images.reshape((10000, 28, 28, 1)) + +# Normalize pixel values to be between 0 and 1 +train_images, test_images = train_images / 255.0, test_images / 255.0 + +model = models.Sequential() +model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) +model.add(layers.MaxPooling2D((2, 2))) +model.add(layers.Conv2D(64, (3, 3), activation='relu')) +model.add(layers.MaxPooling2D((2, 2))) +model.add(layers.Conv2D(64, (3, 3), activation='relu')) + +model.summary() + +model.add(layers.Flatten()) +model.add(layers.Dense(64, activation='relu')) +model.add(layers.Dense(10, activation='softmax')) + +model.summary() + +model.compile(optimizer='adam', + loss='sparse_categorical_crossentropy', + metrics=['accuracy']) + +model.fit(train_images, train_labels, epochs=5) + +test_loss, test_acc = model.evaluate(test_images, test_labels)