Ниже приведен низкоуровневый код логистической регрессии API, который дает правильный результат:
Код: Выделить всё
## initialize part
print_cost=True
num_epochs = 10
learning_rate = 0.005
w = tf.Variable(tf.zeros(shape=(X.shape[0],1))) # shape=(2,1)
b = tf.Variable(0.0)
optimizer = tf.keras.optimizers.SGD(learning_rate)
accuracy = tf.keras.metrics.BinaryAccuracy()
## training part
for i in range(num_epochs):
# forward pass
with tf.GradientTape() as tape:
z = tf.add(tf.matmul(tf.transpose(w), X), b)
bce = tf.keras.losses.BinaryCrossentropy( from_logits=True, label_smoothing=0.0, axis=-1, reduction='sum', name='binary_crossentropy')
cost = bce(Y, z)
# backward pass
trainable_variables = [w, b]
grads = tape.gradient(cost, trainable_variables)
optimizer.apply_gradients(zip(grads, trainable_variables))
# Print the cost every 100 training epochs
if print_cost:
accuracy.update_state(Y, tf.sigmoid(z))
print(f"Epoch {i+1}/{num_epochs} - Cost:{cost.numpy()} - Accuracy:{accuracy.result().numpy()}")
accuracy.reset_states()
Эпоха 2/10 - Стоимость: 0,7410295009613037 - Точность: 0,655502378940 5823
Эпоха 3/10 - Стоимость: 0,7531536817550659 - Точность: 0,3444976210594177
Эпоха 4/10 - Стоимость: 0,8667086958885193 - Точность: 0,6555023789405823
Эпоха 5 /10 - Стоимость: 0,768563449382782 - Точность: 0,34928229451179504
Эпоха 6/10 - Стоимость: 0,897014319896698 - Точность: 0,6555023789405823
Эпоха 7/10 - Стоимость: 0,7556132674217224 - Точность: 0,3684210479259491
Эпоха 8/10 - Стоимость:0,8804366588592529 - Точность:0,6555023789405823
Эпоха 9/10 - Стоимость:0,7514852285385132 - Точность:0,4019138813018799
Эпоха 10 /10 – Стоимость: 0,8771329522132874 – Точность: 0,6555023789405823
Ниже приведен высокоуровневый код логистической регрессии API, который дает неправильный результат:
Код: Выделить всё
# Create the model
model = k.models.Sequential()
model.add( k.layers.Dense(units=1, activation='sigmoid', input_shape=(X.shape[0],), #X.shape[0]=2
kernel_initializer=k.initializers.Zeros(), bias_initializer=k.initializers.Zeros()) )
# Compile the model
model.compile(
optimizer=k.optimizers.SGD(learning_rate=0.005),
loss=k.losses.BinaryCrossentropy(),
metrics=[k.metrics.BinaryAccuracy()],
)
# Train the model
model.fit(tf.transpose(X), tf.transpose(Y), epochs=10, shuffle=False, batch_size=1)
209/209 [=================== ==========] - 1 с 3 мс/шаг -
потеря: 2,6512 - бинарная_точность: 0,5550
Эпоха 2/10
209/209
[== ==========================] - 1 с 4 мс/шаг - потеря: 2,0159 -
binary_accuracy: 0,6459
Эпоха 3/10
209/209
[============================] - 1с 6мс /step - потеря: 1,6735 -
binary_accuracy: 0,6651
Эпоха 4/10
209/209
[================ ==============] - 1 с 4 мс/шаг - потеря: 1,4703 -
binary_accuracy: 0,6842
Эпоха 5/10
209/209
[============================] - 1 с 3 мс/шаг - потеря: 1,2202 -
binary_accuracy: 0,7129
Эпоха 6/10
209/209
[============================ ] - 1 с 3 мс/шаг - потеря: 1,0095 -
binary_accuracy: 0,7464
Эпоха 7/10
209/209
[============ =================] - 1 с 3 мс/шаг - потеря: 0,9206 -
binary_accuracy: 0,7368
Эпоха 8/10
209/ 209
[=============================] - 1 с 3 мс/шаг - потеря: 0,7307 -
binary_accuracy: 0.7703
Эпоха
10 сентября 209/209
[======================== ====] - 0 с 2 мс/шаг - потеря: 0,7977 -
binary_accuracy: 0,7799
Эпоха 10/10
209/209
[======== =====================] - 0 с 2 мс/шаг - потери: 0,5660 -
binary_accuracy: 0,7943
Не удалось правильно реализовать логистическую регрессию в тензорном потоке API высокого уровня keras, но она успешно реализована в API низкого уровня. Пожалуйста, исправьте мою логику в последнем фрагменте кода.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ong-result