我正在学习如何使用Keras创建神经网络,并通过各种教程运行。首先,使用一系列tf.feature_column.numeric_column
构建模型,并将其传递给KerasSequential
模型(在本例中,feat_cols
是特征列):
feature_columns = {c: tf.feature_column.numeric_column(c) for c in feat_cols}
model = Sequential([DenseFeatures(feature_columns=feature_columns.values()),
Dense(units=32, activation='relu',
Dense(units=8, activation='relu'),
Dense(units=1, activation='linear'])
在另一个教程中,最初的输入层是从使用.values
转换为numpy数组的pandas
数据帧中获取的。永远不会创建张量字典,并且第一层没有DenseFeatures
位。(在本例中,df
是数据框,features
是特征列列表,lbl
是目标列)
x = df[features].values
y = df[lbl].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.05)
model = Sequential([
Dense(10, input_shape=(6, ), activation='relu'),
Dense(20, activation='relu'),
Dense(5, activation='relu'),
Dense(1)])
在这种情况下,当调用model.fit
时,只传递x_train
和y_train
,而不是第一个例子中的张量字典。
我的问题是这两种方法的优点或缺点(如果有的话)是什么?它们是到达同一地点的两种方式,还是有实际的区别?
请注意,顺序的网络肯定是不相等的。但是如果你只考虑输入分量,它们本质上是一样的。两者都是将数据传递到网络的有效方法。然而,在实践中,数据框架是更常见的数据源,张量在Tensorflow中更容易处理。然而,使用keras API应该没有性能差异。看到tensorflow.org/tutorials/load_data/pandas_dataframe