# -*- coding: utf-8 -*-
"""dogs_or_cats.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1THt7kyTkXbjunAUIbmXfbsTbINWWOVDV
"""

import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout
import matplotlib.pyplot as plt
from google.colab import files

SIZE = 224 # размер картинки
train, _ = tfds.load('cats_vs_dogs', split=['train[:100%]'], with_info=True, as_supervised=True) # microsoft dataset
## _ т.к. метаданные не нужны

# картинка из обучающей выборки
for img, label in train[0].take(10):
  plt.figure()
  plt.imshow(img)
  print(label)

def resize_image(img, label):
  img = tf.cast(img, tf.float32)
  img = tf.image.resize(img, (SIZE, SIZE))
  img = img / 225.0
  return img, label

train_resized = train[0].map(resize_image)
train_batches = train_resized.shuffle(1000).batch(16)

# кусок предобученной сети, которая работает с разрешением 224х224
base_layers = tf.keras.applications.MobileNetV2(input_shape=(SIZE,SIZE,3), include_top=False)
base_layers.trainable = False

model = tf.keras.Sequential([
                             base_layers,
                             GlobalAveragePooling2D(), # уменьшает картинку и усредняет значения
                             Dropout(0.2), # 20% нейронов в процессе обучения будут случайно выключаться
                             Dense(1, activation='relu') # добавляем слой
])

model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])

model.fit(train_batches, epochs=1) # обучение сети

files.upload() # загружаем картинку

img = load_img('11.jpeg')
img_array = img_to_array(img)
img_resized, _ = resize_image(img_array, _)
img_expended = np.expand_dims(img_resized, axis=0)
#model.predict(img_expended)
prediction = model.predict(img_expended)[0][0]
pred_label = 'КОТ' if prediction < 0.5 else 'СОБАКА'
plt.figure()
plt.imshow(img)
plt.title(f'{pred_label} {prediction}')
# -*- coding: utf-8 -*-
"""dogs_or_cats.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1THt7kyTkXbjunAUIbmXfbsTbINWWOVDV
"""

import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout
import matplotlib.pyplot as plt
from google.colab import files

SIZE = 224 # размер картинки
train, _ = tfds.load('cats_vs_dogs', split=['train[:100%]'], with_info=True, as_supervised=True) # microsoft dataset
## _ т.к. метаданные не нужны

# картинка из обучающей выборки
for img, label in train[0].take(10):
  plt.figure()
  plt.imshow(img)
  print(label)

def resize_image(img, label):
  img = tf.cast(img, tf.float32)
  img = tf.image.resize(img, (SIZE, SIZE))
  img = img / 225.0
  return img, label

train_resized = train[0].map(resize_image)
train_batches = train_resized.shuffle(1000).batch(16)

# кусок предобученной сети, которая работает с разрешением 224х224
base_layers = tf.keras.applications.MobileNetV2(input_shape=(SIZE,SIZE,3), include_top=False)
base_layers.trainable = False

model = tf.keras.Sequential([
                             base_layers,
                             GlobalAveragePooling2D(), # уменьшает картинку и усредняет значения
                             Dropout(0.2), # 20% нейронов в процессе обучения будут случайно выключаться
                             Dense(1, activation='relu') # добавляем слой
])

model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])

model.fit(train_batches, epochs=1) # обучение сети

files.upload() # загружаем картинку

img = load_img('11.jpeg')
img_array = img_to_array(img)
img_resized, _ = resize_image(img_array, _)
img_expended = np.expand_dims(img_resized, axis=0)
#model.predict(img_expended)
prediction = model.predict(img_expended)[0][0]
pred_label = 'КОТ' if prediction < 0.5 else 'СОБАКА'
plt.figure()
plt.imshow(img)
plt.title(f'{pred_label} {prediction}')
# -*- coding: utf-8 -*- dogs_or_cats.ipynb  Automatically generated by Colaboratory.  Original file is located at     https://colab.research.google.com/drive/1THt7kyTkXbjunAUIbmXfbsTbINWWOVDV # размер картинки # microsoft dataset ## _ т.к. метаданные не нужны # картинка из обучающей выборки # кусок предобученной сети, которая работает с разрешением 224х224 # уменьшает картинку и усредняет значения # 20% нейронов в процессе обучения будут случайно выключаться # добавляем слой # обучение сети # загружаем картинку #model.predict(img_expended)