Keras,具有二元分类的简单 CNN 不收敛——最小示例(来自 DeepLizard)

Keras, simple CNN with binary classification doesn't converge — minimal example (from DeepLizard)

我是 NN 和 Keras 的新手。我已经尝试了 DeepLizard 的 this tutorial 并一直关注它,直到这位女士在大约 30 分钟内展示了第一个训练结果。我完全按照步骤操作,除了带有 'shuffle' 的行,因为这不是应该使用的方式(据我所知)。这是我的代码:

import numpy as np
import random as random
from random import randint
from sklearn.preprocessing import MinMaxScaler

from random import shuffle

train_labels = []
train_samples = []

for i in range(50):
  random_younger = randint(13,64)
  train_samples.append(random_younger)
  train_labels.append(1)

  random_older = randint(65,100)
  train_samples.append(random_older)
  train_labels.append(0)

for i in range (1000):
  random_younger = randint(13,64)
  train_samples.append(random_younger)
  train_labels.append(0)

  random_older = randint(65,100)
  train_samples.append(random_older)
  train_labels.append(1)

train_samples = np.array(train_samples)
train_labels = np.array(train_labels)
shuffle(train_samples)
shuffle(train_labels)

scaler = MinMaxScaler(feature_range = (0,1))
scaled_train_samples = scaler.fit_transform(train_samples. reshape(-1,1))

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy

model = Sequential([Dense(units=16, input_shape=(1,), activation='relu'),
                Dense(units=32, activation='relu'),
                Dense(units=2, activation='softmax')])

model.summary()

    model.compile(optimizer=Adam(learning_rate=0.0001),loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(x=scaled_train_samples, y=train_labels, batch_size=5, epochs=30, shuffle=True, verbose=2)

我的神经网络并没有学会一直保持在 50% 的准确率。我试图改变 #of 层和时代,我检查了数据类型和结构。有人可以帮助我生命中第一个最小的例子吗?谢谢!

如前所述,我正在独立洗牌 x 和 y。在教程中,我参考了“shuffle”的使用方式,它不应该工作,请参阅 documentation。我的解决方案:

c = list(zip(train_samples, train_labels))

shuffle(c)

train_samples, train_labels = zip(*c)
train_samples = np.array(train_samples)
train_labels=np.array(train_labels)