Мне интересно, как решить эту проблему у меня.
Итак, у меня есть файл TFrecord, который содержит значения типа A, typeB и типа C. Все значения упорядочены таким образом, чтобы показать их отношение к другим. Таким образом, первое значение typeA принадлежит первому значению typeB и типу C.
Я сейчас пытаюсь ввести свои значения typeA в модель keras, а затем потерю, которую keras сводит к минимуму, находясь между моей моделью вывод и и мои значения типа B
До сих пор я сделал следующее
featureDescription = {
'typeA' : tf.io.FixedLenFeature([], tf.string),
'typeB' : tf.io.FixedLenFeature([], tf.string),
'typeC': tf.io.FixedLenFeature([], tf.string),
}
def parseFunction(proto):
feature = tf.io.parse_single_example(proto, featureDescription)
typeA = tf.io.decode_raw(feature['typeA' ], tf.uint16)
typeB = tf.io.decode_raw(feature['typeB' ], tf.uint16)
typeC = tf.io.decode_raw(feature['typeC'], tf.uint16)
o = tf.constant(32768, shape=(64,),dtype=tf.float32)
a = tf.dtypes.cast(typeA, tf.float32)
b = tf.dtypes.cast(typeB, tf.float32)
c = tf.dtypes.cast(typeC, tf.float32)
a = tf.subtract(a ,o)
b = tf.subtract(b ,o)
c = tf.subtract(c,o)
return a,b,c
def create_dataset(filepath):
dataset = tf.data.TFRecordDataset(filepath)
dataset = dataset.map(parseFunction, num_parallel_calls=tf.data.experimental.AUTOTUNE)
dataset.batch(40000)
iterator = iter(dataset)
typeA, typeB, typeC = iterator.get_next()
return typeA, typeB, typeC
typeA, typeB, typeC = create_dataset('filename_here')
model_input = keras.Input(shape=(64,), name='typeA_input')
model_output = someLayerStuff(64)(model_input)
model = keras.Model(inputs=model_input, outputs=model_output, name='Model')
model.compile(optimizer=tf.keras.optimizers.Adam(
learning_rate=2e-5,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-6,), loss='mse')
model.fit(typeA, typeB, epochs=10000)
Однако, когда я изменяю размер пакета в этом коде на что-то, что не является количеством записей, которые у меня есть в моем наборе данных моя модель больше не проходит через все мои записи набора данных? Почему это происходит и как я могу изменить его, чтобы он использовал весь мой набор данных?