## Convolution neuron network
import tensorflow as tf
tf.__version__
from tensorflow import keras
keras.__version__
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train.shape
y_train.shape
x_train[0]
import matplotlib.pyplot as plt
plt.imshow(x_train[0])
print('Oznaka prve slike:', y_train[0])
y_train_one_hot=keras.utils.to_categorical(y_train,10)
y_test_one_hot=keras.utils.to_categorical(y_test,10)
y_train_one_hot[0]
x_train=x_train/255
x_test=x_test/255
#Kreiranje CNN-a:
model=keras.models.Sequential()
model.add(keras.layers.Conv2D(32,(3,3), activation='relu',padding='same',input_shape=(32,32,3)))
model.add(keras.layers.Conv2D(32,(3,3), activation='relu',padding='same'))
model.add(keras.layers.MaxPooling2D(pool_size=(2,2)))
#Odbacivanje - dropout
model.add(keras.layers.Dropout(0.25))
#5.- 8. sloj
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(keras.layers.MaxPooling2D(pool_size=(2,2)))
model.add(keras.layers.Dropout(0.25))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dropout(0.5))
model.add(keras.layers.Dense(10, activation='softmax'))
model.summary()
#Treniranje CNN-a
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])
povijest_modela=model.fit(x_train,y_train_one_hot, batch_size=32, epochs=20,validation_split=0.2)
import pandas as pd
pd.DataFrame(povijest_modela.history).plot(figsize=(8,5))
plt.grid(True)
plt.xlabel('Epochs')
plt.show
model.save('my_cifar_model.h5')
model.evaluate(x_test,y_test_one_hot)
#Testiranje na vlastitim slikama:
!curl -o macka.jpg https://www.kucni-ljubimci.com/wp-content/uploads/2017/04/Sretna-maca.jpg
slika = plt.imread("/content/macka.jpg")
slika.shape
from skimage.transform import resize
slika_resized = resize(slika, (32,32))
plt.imshow(slika_resized)
import numpy as np
vjerojatnosti = model.predict(np.array( [slika_resized,] ))
vjerojatnosti
broj_u_klase=['avion','automobil','ptica','mačka','jelen','pas','zaba','konj','brod', 'kamion']
index = np.argsort(vjerojatnosti[0,:])
for i in range (9,5,-1): #prvih nekoliko vjerojatnosti
print(broj_u_klase[index[i]], ":", vjerojatnosti[0,index[i]])
#
#
## Neutral network
Radi se u Google Colabu, ovo je moj kod. Zapamti ga za buduće radnje i na principu njega napravi zadani zadatak.
import tensorflow as tf
from tensorflow import keras
tf.__version__
#Dohvaćanje podataka
baza=keras.datasets.fashion_mnist
(X_train,y_train), (X_test,y_test)=baza.load_data()
X_train.shape
y_train
class_names=["T-shirt/top", "Trouser", "Pullover","Dress", "Coat", "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]
y_train[0]
class_names[y_train[0]]
X_train[0].shape
import matplotlib.pyplot as plt
plt.imshow(X_train[0], cmap='gray')
X_train=X_train/255
X_valid=X_train[:5000]
X_train=X_train[5000:]
y_valid=y_train[:5000]
y_train=y_train[5000:]
for i in range(0,5):
plt.subplot(151+i)
plt.imshow(X_valid[i], cmap='gray')
plt.title(class_names[y_valid[i]])
plt.show()
#Definiranje modela
model=keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28,28]))
model.add(keras.layers.Dense(300, activation="relu"))
model.add(keras.layers.Dense(100, activation="relu"))
model.add(keras.layers.Dense(10, activation="softmax"))
model.layers
#Prikaz arhitekture stvorenog modela
model.summary()
keras.utils.plot_model(model, show_shapes=True)
hidden1=model.layers[1]
weights, bias= hidden1.get_weights()
weights
#Kompailiranje modela
model.compile(loss="sparse_categorical_crossentropy",
optimizer="sgd",
metrics=["accuracy"]) #mozemo nabrojati više metrika
#Treniranje modela
history=model.fit(X_train,y_train,batch_size=32, epochs=20, validation_data=(X_valid, y_valid))
#history=model.fit(X_train,y_train,batch_size=256, epochs=20, validation_split=0.2)
#Vizualizacija rezultata treniranja
history.history.keys()
import pandas as pd
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.ylim(0,1)
plt.show()
#Testiranje
model.evaluate(X_test,y_test)
predikcije=model.predict(X_test)
predikcije
import numpy as np
y_pred=np.argmax(predikcije,axis=-1)
y_pred
np.array(class_names)[y_pred]
for i in range(0,5):
plt.subplot(151+i)
plt.imshow(X_test[i], cmap='gray')
plt.title(class_names[y_pred[i]]) #što je predvidjelo
plt.show()
from sklearn.metrics import classification_report
print(classification_report(y_test,y_pred))
#
#
## Autoencoders
Radi se u Google Colabu, ovo je moj kod. Zapamti ga za buduće radnje i na principu njega napravi zadani zadatak. Autoencoderi.
import tensorflow
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()
x_train = x_train / 255
x_test = x_test / 255
encoder=keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dense(100, activation="relu"),
keras.layers.Dense(30, activation="relu") #bottleneck
])
decoder=keras.models.Sequential([
keras.layers.Dense(100, activation="relu",input_shape=[30]),
keras.layers.Dense(28*28, activation="sigmoid"),
keras.layers.Reshape([28,28])
])
stacked_autoencoder=keras.models.Sequential([encoder,decoder])
stacked_autoencoder.compile(loss="binary_crossentropy", optimizer='adam', metrics=['accuracy'])
history=stacked_autoencoder.fit(x_train,x_train, epochs=10,validation_data=[x_test,x_test])
plt.figure(figsize=(20,5))
for i in range(8):
plt.subplot(2,8,i+1)
plt.imshow(x_test[i], cmap="binary")
plt.subplot(2,8,8+1+i)
pred=stacked_autoencoder.predict(x_test[i].reshape(1,28,28))
plt.imshow(pred.reshape(28,28),cmap="binary")
plt.figure(figsize=(10,5))
plt.subplot(1,3,1)
plt.imshow(x_test[0], cmap="binary")
plt.subplot(1,3,2)
latent_vector=encoder.predict(x_test[0].reshape(1,28,28))
plt.imshow(latent_vector, cmap="binary")
plt.subplot(1,3,3)
pred=decoder.predict(latent_vector)
plt.imshow(pred.reshape(28,28),cmap="binary")
1-30/(28*28)
#Denoising autoencoder
plt.figure(figsize=(10,5))
plt.subplot(1,2,1)
plt.imshow(x_test[0], cmap="binary")
plt.subplot(1,2,2)
noise=np.random.random((28,28))/4
plt.imshow(x_test[0]+noise, cmap="binary")
encoder=keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dense(100, activation="relu"),
keras.layers.Dense(100, activation="relu"), ######
keras.layers.Dense(30, activation="relu") #bottleneck
])
decoder=keras.models.Sequential([
keras.layers.Dense(100, activation="relu",input_shape=[30]),
keras.layers.Dense(100, activation="relu"),#####
keras.layers.Dense(28*28, activation="sigmoid"),
keras.layers.Reshape([28,28])
])
stacked_autoencoder=keras.models.Sequential([encoder,decoder])
stacked_autoencoder.compile(loss="binary_crossentropy", optimizer='adam', metrics=['accuracy'])
#dodavanje šuma
x_train_noise=x_train+((np.random.random(x_train.shape))/4)
x_test_noise=x_test+((np.random.random(x_test.shape))/4)
history=stacked_autoencoder.fit(x_train_noise,x_train, epochs=10,validation_data=[x_test_noise,x_test])
plt.figure(figsize=(20,5))
for i in range(8):
plt.subplot(2,8,i+1)
plt.imshow(x_test_noise[i], cmap="binary")
plt.subplot(2,8,8+1+i)
pred=stacked_autoencoder.predict(x_test_noise[i].reshape(1,28,28))
plt.imshow(pred.reshape(28,28),cmap="binary")