Python TensorFlow iki aynı kod farklı çıktı veriyor

GT 145

Decapat
Katılım
29 Temmuz 2021
Mesajlar
723
Çözümler
1
Arkadaşlar kafayı sıyıracağım kodların ikisi de aynı, sadece hocamda hata vermeyen ama bende veren bir kısmı düzelttim. Kodlar aşağıda.
Hocamın kodu:
Python:
import numpy as np
import pandas as pd

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, GRU, Embedding
import tensorflow as tf

dataset = pd.read_csv('hepsiburada.csv')

dataset

target = dataset['Rating'].values.tolist()
data = dataset['Review'].values.tolist()

cutoff = int(len(data) * 0.80)
x_train, x_test = data[:cutoff], data[cutoff:]
y_train, y_test = target[:cutoff], target[cutoff:]

x_train[500]

x_train[800]

y_train[800]

num_words = 10000
tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=num_words)

tokenizer.fit_on_texts(data)

tokenizer.word_index

x_train_tokens = tokenizer.texts_to_sequences(x_train)

x_train[800]

print(x_train_tokens[800])

x_test_tokens = tokenizer.texts_to_sequences(x_test)

num_tokens = [len(tokens) for tokens in x_train_tokens + x_test_tokens]
num_tokens = np.array(num_tokens)

np.mean(num_tokens)

np.max(num_tokens)

np.argmax(num_tokens)

x_train[21941]

max_tokens = np.mean(num_tokens) + 2 * np.std(num_tokens)
max_tokens = int(max_tokens)
max_tokens


np.sum(num_tokens < max_tokens) / len(num_tokens)


x_train_pad = tf.keras.utils.pad_sequences(x_train_tokens, maxlen=max_tokens)


x_test_pad = tf.keras.utils.pad_sequences(x_test_tokens, maxlen=max_tokens)


x_train_pad.shape


x_test_pad.shape


np.array(x_train_tokens[800])


x_train_pad[800]


idx = tokenizer.word_index
inverse_map = dict(zip(idx.values(), idx.keys()))


def tokens_to_string(tokens):
    words = [inverse_map[token] for token in tokens if token!=0]
    text = ' '.join(words)
    return text


x_train[800]


tokens_to_string(x_train_tokens[800])


model = Sequential()


embedding_size = 50


model.add(Embedding(input_dim=num_words,
                    output_dim=embedding_size,
                    input_length=max_tokens,
                    name='embedding_layer'))


model.add(GRU(units=16, return_sequences=True))
model.add(GRU(units=8, return_sequences=True))
model.add(GRU(units=4))
model.add(Dense(1, activation='sigmoid'))


model.compile(loss="binary_crossentropy",
              optimizer="adam",
              metrics=['accuracy'])



model.summary()


model.fit(x_train_pad, y_train, epochs=5, batch_size=256)


result = model.evaluate(x_test_pad, y_test)


result[1]


y_pred = model.predict(x=x_test_pad[0:1000])
y_pred = y_pred.T[0]


cls_pred = np.array([1.0 if p>0.5 else 0.0 for p in y_pred])


cls_true = np.array(y_test[0:1000])


incorrect = np.where(cls_pred != cls_true)
incorrect = incorrect[0]


len(incorrect)


idx = incorrect[0]
idx


text = x_test[idx]
text


y_pred[idx]


cls_true[idx]


text1 = "bu ürün çok iyi herkese tavsiye ederim"
text2 = "kargo çok hızlı aynı gün elime geçti"
text3 = "büyük bir hayal kırıklığı yaşadım bu ürün bu markaya yakışmamış"
text4 = "mükemmel"
text5 = "tasarımı harika ancak kargo çok geç geldi ve ürün açılmıştı tavsiye etmem"
text6 = "hiç resimde gösterildiği gibi değil"
text7 = "kötü yorumlar gözümü korkutmuştu ancak hiçbir sorun yaşamadım teşekkürler"
text8 = "hiç bu kadar kötü bir satıcıya denk gelmemiştim ürünü geri iade ediyorum"
text9 = "tam bir fiyat performans ürünü"
text10 = "beklediğim gibi çıkmadı"
texts = [text1, text2, text3, text4, text5, text6, text7, text8, text9, text10]


tokens = tokenizer.texts_to_sequences(texts)


tokens_pad = tf.keras.utils.pad_sequences(tokens, maxlen=max_tokens)
tokens_pad.shape


model.predict(tokens_pad)

Benim kodum:
Python:
import numpy as np
import pandas as pd
import tensorflow as tf

dataset = pd.read_csv("hepsiburada.csv")

dataset

target = dataset['Rating'].values.tolist()
data = dataset['Review'].values.tolist()

cutoff = int(len(data)*0.80)
x_train, x_test = data[:cutoff], data[cutoff:]
y_train, y_test = target[:cutoff], target[cutoff:]


x_train[500]
y_train[500]

num_words=10000
tokenizer = tf.keras.preprocessing.text.Tokenizer(
    num_words=num_words
)

tokenizer.fit_on_texts(data)

tokenizer.word_index

x_train_tokens = tokenizer.texts_to_sequences(x_train)

x_train_tokens[500]
x_test_tokens = tokenizer.texts_to_sequences(x_test)

num_tokens=[
    len(tokens) for tokens in x_train_tokens+x_test_tokens
]
num_tokens = np.array(num_tokens)

np.mean(num_tokens)
np.max(num_tokens)
np.argmax(num_tokens)

x_train[21941]

max_tokens = np.mean(
    num_tokens+2*np.std(num_tokens)
)
max_tokens = int(max_tokens)
max_tokens

np.sum(num_tokens<max_tokens)/len(num_tokens)

x_train_pad = tf.keras.utils.pad_sequences(
    x_train_tokens,
    maxlen=max_tokens
)

x_test_pad = tf.keras.utils.pad_sequences(
    x_test_tokens,
    maxlen=max_tokens
)

x_train_pad.shape

x_test_pad.shape

np.array(x_train_tokens[800])

x_train_pad[800]

idx=tokenizer.word_index
inverse_map = dict(
    zip(idx.values(),
        idx.keys())
)

def tokens_to_string(tokens):
    words = [
        inverse_map[token] for token in tokens if token!=0
    ]
    text=' '.join(words)
    return text

x_train[600]

tokens_to_string(x_train_tokens[600])
#Bazı kelimelerin olmaması, kelimelerde az olanlar sayılmadığı için.Hatalı kelimelerde az kullanıldığı için.

y_train = np.array(y_train)

model = tf.keras.Sequential()

embedding_size = 50

model.add(tf.keras.layers.Embedding(
    input_dim=num_words,
    output_dim=embedding_size,
    input_length=max_tokens,
    name='embedding_layer'))

model.add(tf.keras.layers.GRU(16,return_sequences=True))
model.add(tf.keras.layers.GRU(8,return_sequences=True))
model.add(tf.keras.layers.GRU(4))
model.add(tf.keras.layers.Dense(1,activation='sigmoid'))

optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)

model.compile(loss="binary_crossentropy",
              optimizer=optimizer,
              metrics=['accuracy'])
model.summary()


model.fit(x_train_pad,
          y_train,
          epochs=5,
          batch_size=256)

result = model.evaluate(x_test_pad, np.array(y_test))

result[1]

y_pred = model.predict(x=x_test_pad[0:1000])
y_pred = y_pred.T[0]

cls_pred = np.array([1.0 if p>0.5 else 0.0 for p in y_pred])

cls_true = np.array(y_test[0:1000])

incorrect = np.where(cls_pred != cls_true)
incorrect = incorrect[0]

len(incorrect)

idx = incorrect[0]
idx

text = x_test[idx]
text

y_pred[idx]

cls_true[idx]

text1 = "bu ürün çok iyi herkese tavsiye ederim"
text2 = "kargo çok hızlı aynı gün elime geçti"
text3 = "büyük bir hayal kırıklığı yaşadım bu ürün bu markaya yakışmamış"
text4 = "mükemmel"
text5 = "tasarımı harika ancak kargo çok geç geldi ve ürün açılmıştı tavsiye etmem"
text6 = "hiç resimde gösterildiği gibi değil"
text7 = "kötü yorumlar gözümü korkutmuştu ancak hiçbir sorun yaşamadım teşekkürler"
text8 = "hiç bu kadar kötü bir satıcıya denk gelmemiştim ürünü geri iade ediyorum"
text9 = "tam bir fiyat performans ürünü"
text10 = "beklediğim gibi çıkmadı"
texts = [text1, text2, text3, text4, text5, text6, text7, text8, text9, text10]

tokens = tokenizer.texts_to_sequences(texts)
tokens_pad = tf.keras.utils.pad_sequences(tokens,maxlen=max_tokens)
tokens_pad.shape

model.predict(tokens_pad)

@Vavien. ve @bitwise hocalarım sizler çok iyi anlıyorsunuz yardımcı olursanız sevinirim.
 
Kodda bir rastgelelik göremedim. Farklılığa sebep olabilecek durumlar: Csv dosya değerlerinin farklı olması, kendin belirlediğin adam değerinin hocanın kodu yazdığı tarihteki default haliyle uyuşmaması olabilir gibi geldi. Kodun çalışıyorsa takma bu kadar bence. Her şey zaman zaman değişiyor ve eskisine göre farklı sonuçlar verebiliyor.

Evet artık TensorFlow'dan nefret etmeye başladım zaten. Pytorch'a geçmek istiyorum :D.
 

Yeni konular

Geri
Yukarı