Проблема заключается в том, что в вашем руководстве используется API, отличный от API набора данных keras, используемого в большинстве современных учебных пособий. При использовании keras.dataset
API вы пытаетесь «пересечь потоки».
У вас (в широком смысле) есть три варианта:
Вариант 1
Просто придерживайтесь существующего учебника и игнорируйте предупреждения об устаревании. Супер просто, но вы можете пропустить преимущества keras api (новый стандарт), если вы не собираетесь изучать это позже
Вариант 2
Полностью переключитесь на keras
API и найдите новый учебник. Этот является примером MNIST всего в нескольких строках кода:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
Если он вам доступен, я бы рекомендовал этот вариант. keras
- это новое значение по умолчанию. Возможно, это не вариант, или вы хотите придерживаться своего первоначального курса, но я определенно рекомендую в ближайшее время ознакомиться с keras
.
Вариант 3
Найдите способ успешно «пересечь потоки».
Это более сложно, но, безусловно, можно сделать. В конце концов, keras.dataset
для mnist - это просто большой массив. Вы можете посмотреть в API набора данных (в частности, load_from_tensor()
и load_from_tensor_slices()
). Эти параметры потребуют небольшого спора, потому что по своей сути (как вы обнаружили) набор данных, возвращаемый из нового метода, отличается от типа, возвращаемого из старых.
UPDATE:
Ссылка в ответе nag предоставляет исчерпывающий пример того, что я не знал ранее!