那么第一次创建基于字符串的网络时应该采取哪些步骤?
神经网络处理数值数据。它们也适用于相对较小的浮点数,以零为中心。您可以对该部分不那么严格,但是您经常会在神经网络中看到计算每个特征的训练数据的均值和标准差的方法,然后通过执行转换所有特征x = (x - means) / stds(您想存储这些缩放因子与网络数据一起使用,因为稍后在使用网络进行预测时,您将希望重新使用相同的值)。
那么如果输入的数据还不是这种形式,你会怎么做呢?在使用它进行训练或预测之前,您可以在代码中对其进行准备。这是机器学习脚本中非常常见的结构:
raw_features, raw_labels = load_from_disk( some_data_source )
all_features = convert_features( raw_features )
all_labels = convert_labels( raw_labels )
train_X, test_X, train_y, test_y = split_data( all_features, all_labels )
model = build_model( .... various model params ....)
model.fit( train_X, train_y )
test_predictions = model.predict( test_X )
report_accuracy( test_predictions, test_Y )
以上是粗略的伪代码,因此通常上述所有函数都有不同的名称,或者是多行执行相同的操作,如果您正在编写快速脚本,您可能不会费心将其封装到可重用的方法中。我展示的分割特征的部分可能会内置到训练函数中,而且训练过程可以使用测试数据来帮助监控进度也是很常见的。
如果加载和转换需要很长时间,您可以在单独的脚本中执行此操作,并将生成的 NumPy 数组保存在单独的文件中,以便下次更快加载。
因此,您关心的部分是如何convert_features从起始字符串构建一段代码。答案是使用可以从字符串中提取的任何相关值。字符串长度可能是一个简单的开始,即len( text )- 但您也可以查看任何其他可以计算的度量(例如元音的数量,单词中不常见的二元组)。决定尝试哪些功能并在它们之间进行测试是特征工程,这通常需要一些创造力。重要的是特征必须都是数字的。对于神经网络,您还应该尝试使它们相对较小和/或在进入下一阶段之前将它们转换为均值 0、标准差 1。
当你稍后使用网络进行预测时,你必须重复大部分管道:
model = load_model( model_file_or_identifier )
raw_features, raw_labels = fetch_data( some_data_source )
X = convert_features( raw_features )
y = convert_labels( raw_labels )
predictions = model.predict( X )
report_predictions( X, y )