【问题标题】:how to use a single dataset to train multiple input model in tensorflow keras如何使用单个数据集在 tensorflow keras 中训练多个输入模型
【发布时间】:2022-01-18 15:07:24
【问题描述】:

我正在尝试使用具有 3 列的单个大型数据集训练多输入模型 - featuers_mlpfeatuers_lstmlabels

(使用pentastorm因为数据集很大)

型号:

LEARNING_RATE=0.001
BATCH_SIZE = 256
TRAIN_MAX_STEPS=None
STEPS = None
NUM_EPOCHS = 2
LEAKY_RELU_ALPHA = 0.1


input_layer_mlp = Input(shape=(len(mlp_feature),), name='input_mlp')
input_layer_lstm = Input(shape=(5,6,), name='input_lstm')

l1 = LSTM(64, return_sequences=True, kernel_initializer='glorot_uniform')(input_layer_lstm)
l2 = LSTM(32, return_sequences=False)(l1)
m1 = Dense(32, activation=LeakyReLU(alpha=LEAKY_RELU_ALPHA), kernel_initializer='glorot_uniform')(input_layer_mlp)
m2 = Concatenate()([l2, m1])
m3 = Dense(16, activation=LeakyReLU(alpha=LEAKY_RELU_ALPHA))(m2)
out = Dense(1, activation=LeakyReLU(alpha=LEAKY_RELU_ALPHA))(m3)
optimizer = tf.keras.optimizers.Adam(learning_rate = LEARNING_RATE)

model = tf.keras.Model(inputs=[input_layer_mlp, input_layer_lstm],
                  outputs=[out])

losses = {'out': Huber(delta=1.0)}
metrics = {'out': MeanAbsoluteError()}

model.compile(optimizer=optimizer, loss=losses, metrics = metrics)

培训代码

model = build_model_mlp(in_shape=11)
with penta_train_mlp.make_tf_dataset(transform_spec=transform_spec_fn, 
                                   batch_size=BATCH_SIZE) as train_dataset, \
   penta_test_mlp.make_tf_dataset(transform_spec=transform_spec_fn, 
                                 batch_size=BATCH_SIZE) as val_dataset:
    # tf.keras only accept tuples, not namedtuples
#     print(train_dataset)
    train_dataset_val = train_dataset.map(lambda x: (x.features, x.labels))
    steps_per_epoch = len(penta_train_mlp) // BATCH_SIZE

    val_dataset_val = val_dataset.map(lambda x: (x.features, x.labels))
    validation_steps = max(1, len(penta_test_mlp) // BATCH_SIZE)

    print(f"steps_per_epoch: {steps_per_epoch}, validation_steps: {validation_steps}")

    hist = model.fit(train_dataset_val, 
                     steps_per_epoch=steps_per_epoch,
                     epochs=NUM_EPOCHS,
                     validation_data=val_dataset_val,
                     validation_steps=validation_steps,
                     verbose=2)



# print("Validation Accuracy: {}".format(accuracy))

错误:

 Failed to find data adapter that can handle input: (<class 'tuple'> containing values of types {"<class 'tensorflow.python.data.ops.dataset_ops.DatasetV1Adapter'>"}), <class 'tensorflow.python.data.ops.dataset_ops.DatasetV1Adapter'>

如何创建多输入数据集?

我尝试使用张量切片,但由于数据已经是数据集格式,它不起作用

dataset_train = tf.data.Dataset.from_tensor_slices(({'input_mlp': train_mlp_x, 'input_lstm': train_lstm_x}, train_mlp_y)).batch(1)#tf.data.Dataset.from_tensor_slices(((val_mlp_x, data_b), labels)).batch(1).repeat()

error:
 Unbatching a dataset is only supported for rank >= 1

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    得到答案

    def map_func(x):
        return {
            'input_1': x.input_1,
            'input_2': tf.reshape(x.input_2,(-1,5,6))
        }, x.labels
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2019-10-04
      • 2021-05-13
      • 2020-12-15
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多