我随身带了两个文件,一个输入文件和一个输出文件。输入文件经过转换逻辑并生成输出文件。这里的问题是,我不知道输入和输出文件之间的转换逻辑。输入文件包含10个字段,输出文件包含7个字段。使用转换逻辑将这10个字段转换为7个字段。
有没有办法使用某种机器学习算法,建立一个模型,自动推断输入和输出之间的关系,并能够根据输入文件中的数据预测输出?
发布于 2020-08-04 18:50:35
我想我有一些东西可以帮助你解决你的问题:你有不同的输入和不同的数据类型。同样,您有不同数据类型的不同输出。当使用tensorflow和keras时,让我们以此数据集为例:
x_categorical=[1,2,3,4,5]
x_categorical_2=np.random.choice(x_categorical, len(x_categorical))
x_continuus=np.random.random_sample(len(x_categorical))
y_categorical = [0,2,3,4,5]
y_continuus = np.random.random_sample(len(x_categorical))
创建tf.data.Datasets并将x和y值压缩在一起,以便它适合模型输入:
ds_x = tf.data.Dataset.from_tensor_slices(x_categorical)
ds_x1 = tf.data.Dataset.from_tensor_slices(x_categorical_2)
ds_x2 = tf.data.Dataset.from_tensor_slices(x_continuus)
dataset_x = tf.data.Dataset.zip((ds_x,ds_x1,ds_x2))
ds_y = tf.data.Dataset.from_tensor_slices(y_categorical)
ds_y1 = tf.data.Dataset.from_tensor_slices(y_continuus)
dataset_y = tf.data.Dataset.zip((ds_y,ds_y1))
dataset_train = tf.data.Dataset.zip((dataset_x, dataset_y))
构建一个连接输入的示例模型,其中一个层包含数据组合的“逻辑”,另外两个层包含每个输出的逻辑:
from tensorflow.keras import layers as layer
layer_input_categorical = layer.Input(shape=(1),name="x_categorical", dtype=tf.float32)
layer_input_categorical_2 = layer.Input(shape=(1),name="x_categorical_2", dtype=tf.float32)
layer_input_continuus = layer.Input(shape=(1),name="x_continuus", dtype=tf.float32)
concat_layer = layer.Concatenate()([layer_input_categorical,layer_input_categorical_2, layer_input_continuus])
dense_layer = layer.Dense(100)(concat_layer)
dense_layer_out_cat = layer.Dense(50)(dense_layer)
dense_layer_out_con = layer.Dense(50)(dense_layer)
output_categorical = layer.Dense(5, activation="softmax")(dense_layer_out_cat)
output_continuus = layer.Dense(1, activation="sigmoid")(dense_layer_out_con)
model = tf.keras.Model(inputs=[layer_input_categorical, layer_input_categorical_2, layer_input_continuus], \
outputs=[output_categorical, output_continuus])
model.compile(optimizer="Nadam", loss=["mse","sparse_categorical_crossentropy"])
请注意两个损失函数的使用(mse用于回归,sparse_categorical_crossentropy用于分类。
还要注意,两个输出层具有不同的激活函数,softmax用于分类(对于每个类,您将获得概率)和一个sigmoid用于回归。
最后,只需使用以下命令开始训练:
model.fit(dataset_train.batch(1), epochs=20)
当然,这不是最好的方法,但它证明了这是可能的。
https://stackoverflow.com/questions/63242965
复制相似问题