tf.keras `Foregnet ()` получает разные результаты - PullRequest
0 голосов
/ 14 марта 2019

Я играл с tf.keras и запустил какой-то метод predict() на двух Model объектах с одинаковой инициализацией весов.

import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import LSTM, Masking, Input, Embedding, Dense
from tensorflow.keras.models import Model

tf.enable_eager_execution()
np.random.seed(10)

X = np.asarray([
    [0, 1, 2, 3, 3],
    [0, 0, 1, 1, 1],
    [0, 0, 0, 1, 1],
])

y = [
    0,
    1,
    1
]

seq_len = X.shape[1]

inp = Input(shape=[seq_len])
emb = Embedding(4, 10, name='embedding')(inp)

x = emb
x = LSTM(5, return_sequences=False, name='lstm')(x)
out = Dense(1, activation='sigmoid', name='out')(x)

model = Model(inputs=inp, outputs=out)
model.summary()

preds = model.predict(X)

inp = Input(shape=[seq_len])
emb = Embedding(4, 10, name='embedding', weights=model.get_layer('embedding').get_weights()[0])(inp)

x = emb
x = LSTM(5, return_sequences=False, weights=model.get_layer('lstm').get_weights()[0])(x)
out = Dense(1, activation='sigmoid', weights=model.get_layer('out').get_weights()[0])(x)

model_2 = Model(inputs=inp, outputs=out)
model_2.summary()

preds_2 = model_2.predict(X)

print(preds, preds_2)

Я не уверен, почему, но результаты двух предсказаний различны. Я получил их, когда запустил функцию print. Вы можете получить что-то другое.

[[0.5027414 ]
 [0.5019673 ]
 [0.50134844]] [[0.5007331]
 [0.5002397]
 [0.4996575]]

Я пытаюсь понять, как работает keras. Любое объяснение будет оценено. Спасибо.

ПРИМЕЧАНИЕ : ЗДЕСЬ НЕ УЧИТСЯ. Я не понимаю, откуда взялась случайность.

1 Ответ

0 голосов
/ 14 марта 2019

Дело в машинном обучении в том, что оно не всегда учится совершенно одинаково. Он включает в себя множество вероятностей, поэтому в более широком масштабе результаты будут иметь тенденцию сходиться к одному значению, но отдельные прогоны могут и будут давать разные результаты.

Подробнее здесь

Абсолютно нормально, что многие работают с одними и теми же входными данными. дать другой вывод. Это в основном из-за внутренней стохастичности таких методов машинного обучения (пример: ANN, деревья решений алгоритмы построения и т. д.).

- Набиль Белгасми, Университет Манубы

Не существует конкретного метода или техники. Результаты и Оценка производительности зависит от нескольких факторов: данные тип, параметры индукционной функции, тренировочный набор (контролируемый), и т.д. Что важно, так это сравнить результаты использования метрики измерения, такие как отзыв, точность, F_measure, ROC кривые или другие графические методы.

- Университет имени Хесуса Антонио Мотта Лаваль

EDIT Функция предиката () принимает массив из одного или нескольких экземпляров данных.

Пример ниже демонстрирует, как сделать регрессионные прогнозы для нескольких экземпляров данных с неизвестным ожидаемым результатом.

# example of making predictions for a regression problem
from keras.models import Sequential
from keras.layers import Dense
from sklearn.datasets import make_regression
from sklearn.preprocessing import MinMaxScaler
# generate regression dataset
X, y = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=1)
scalarX, scalarY = MinMaxScaler(), MinMaxScaler()
scalarX.fit(X)
scalarY.fit(y.reshape(100,1))
X = scalarX.transform(X)
y = scalarY.transform(y.reshape(100,1))
# define and fit the final model
model = Sequential()
model.add(Dense(4, input_dim=2, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='adam')
model.fit(X, y, epochs=1000, verbose=0)
# new instances where we do not know the answer
Xnew, a = make_regression(n_samples=3, n_features=2, noise=0.1, random_state=1)
Xnew = scalarX.transform(Xnew)
# make a prediction
ynew = model.predict(Xnew)
# show the inputs and predicted outputs
for i in range(len(Xnew)):
    print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))

Выполнение примера дает несколько предсказаний, а затем выводит входные данные и предсказания рядом для просмотра.

X=[0.29466096 0.30317302], Predicted=[0.17097184]
X=[0.39445118 0.79390858], Predicted=[0.7475489]
X=[0.02884127 0.6208843 ], Predicted=[0.43370453]

ИСТОЧНИК

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...