Ошибка: AttributeError: 'Split' object has no attribute 'subsplit'

При попытке запустить код выдаёт ошибку.

  File "C:\Users\Damir\IdeaProjects\nero\556.py", line 42, in <module>
    dog_cat_train(model)
  File "C:\Users\Damir\IdeaProjects\nero\556.py", line 24, in dog_cat_train
    splits = tfds.Split.TRAIN.subsplit(weighted=(80, 10, 10))
AttributeError: 'Split' object has no attribute 'subsplit'

Код:

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, Activation, BatchNormalization, AveragePooling2D
from tensorflow.keras.optimizers import SGD, RMSprop, Adam
## pip install tensorflow-datasets
import tensorflow_datasets as tfds
import tensorflow as tf
import logging
import numpy as np
import time
def dog_cat_model():
    model = Sequential()
    model.add(Conv2D(32, (3, 3), input_shape=(128, 128, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dense(units=128, activation='relu'))
    model.add(Dense(units=1, activation='sigmoid'))
    model.compile(optimizer=Adam(),loss='binary_crossentropy',metrics=['accuracy'])
    return model
def dog_cat_train(model):
    splits = tfds.Split.TRAIN.subsplit(weighted=(80, 10, 10))
    (cat_train, cat_valid, cat_test), info = tfds.load('cats_vs_dogs',split=list(splits), with_info=True, as_supervised=True)

    def pre_process_image(image, label):
        image = tf.cast(image, tf.float32)
        image = image/255.0
        image = tf.image.resize(image, (128, 128))
        return image, label

    BATCH_SIZE = 32
    SHUFFLE_BUFFER_SIZE = 1000
    train_batch = cat_train.map(pre_process_image).shuffle(SHUFFLE_BUFFER_SIZE).repeat().batch(BATCH_SIZE)
    validation_batch = cat_valid.map(pre_process_image).repeat().batch(BATCH_SIZE)

    t_start = time.time()
    model.fit(train_batch, steps_per_epoch=4000, epochs=2,validation_data=validation_batch,validation_steps=10,callbacks=None)
    print("Training done, dT:", time.time() - t_start)
model = dog_cat_model()
dog_cat_train(model)
model.save('dogs_cats.h5')

Читал про то, что это неактуальная команда, но я не смог правильно заменить. Объясните пожалуйста на примере моего кода. А так же есть 2 ошибка но это мне кажется зависимость от 1.


Ответы (2 шт):

Автор решения: MaxU

Воспользуйтесь splits.

Судя по примерам из документации, можно воспользоваться slice notations:

train_ds, val_ds, test_ds = \
    tfds.load('cats_vs_dogs', split='train[:80%], train[80%:], test')

NOTE: этот код не тестировался, т.к. у меня более старая версия tensorflow

→ Ссылка
Автор решения: Дамир Бурлаков

Помогло следующие:

def dog_cat_train(model):
    splits = ("train[:80]", "train[:10]", "train[:10]")
    train_ds, val_ds, test_ds = tfds.load('cats_vs_dogs', split=splits)
    (cat_train, cat_valid, cat_test), info = tfds.load('cats_vs_dogs',split=list(splits), with_info=True, as_supervised=True)
→ Ссылка