当前位置: 首页 > 科技观察

如何使用TensorFlow构建机器学习模型

时间:2023-03-18 00:52:43 科技观察

TensorFlow是由Google开发并于2015年开源的库,可以轻松构建和训练机器学习模型。我们接下来要构建的模型将能够自动将千米转换为英里,在这种情况下,我们将创建一个可以学习如何进行这种转换的模型。我们将向这个模型提供一个CSV(https://en.wikipedia.org/wiki/Comma-separated_values)文件作为输入,其中有29组已经执行的公里和英里之间的转换,基于这些数据,我们模型将学习自动执行此转换。我们将使用监督学习算法,因为我们知道输入数据和输出结果。并使用Python作为编程语言。Python提供了一系列与机器学习相关的方便的库和工具。此示例中的所有步骤均使用GoogleColab执行。GoogleColab允许我们以零配置在浏览器上编写和执行Python代码。导入所需的库我们首先导入将在我们的示例中使用的库。importtensorflowastfimportpandasasspdimportseabornassnsnsimportmatplotlib.pyplotasplt我们将导入TensorFlow来创建我们的机器学习模型。我们还将导入Pandas库以读取包含转换后的千米和英里数据的CSV文件。最后,我们将导入Seaborn和Matlotlib库来绘制不同的结果。加载示例数据我们将带有逗号分隔值的文件(Kilometers-miles.csv)读取到我们的数据框中。此文件包含一系列公里和英里值的转换。我们将使用这些数据帧来训练我们的模型。您可以通过此链接下载此文件(https://drive.google.com/file/d/1m63pJA-zUAA12XOCCBt3Aik9fnjrj_8s/view?usp=sharing)。要从GoogleColab读取文件,您可以使用不同的方法。在此示例中,我将CSV文件直接上传到我的GoogleColab上的sample_data文件夹,但您可以从URL(例如,从GitHub)读取该文件。上传到GoogleColab的问题是运行时重启时数据丢失。DataFrames是二维可调整大小的各种表格数据。df=pd.read_csv('/content/sample_data/Kilometres-miles.csv')df.info样本数据信息绘制数据框我们将导入“searborn”库的“scatterplot”并命名为“sns”,然后使用这个绘制上图的库。它显示了X(公里)和Y(英里)之间对应关系的图形表示。print("Paintingthecorrelations")#Onceweloadseabornintothesession,everytimeamatplotlibplotisexecuted,seaborn'sdefaultcustomizationsareaddedsns.scatterplot(df['Kilometers'],df['Miles'])plt.show()公里和英里的相关性我们定义的输入输出训练模型的数据框:X(公里)是输入,Y(英里)是输出。print("Defineinput(X)andoutput(Y)variables")X_train=df['Kilometres']y_train=df['Miles']创建一个神经网络现在,让我们使用“keras.Sequential”方法创建一个神经网络网络,这又增加了“层”。每一层都具有逐渐提取输入数据以获得所需输出的功能。Keras是一个用Python编写的库,我们可以在其中创建神经网络并使用不同的机器学习框架,例如TensorFlow。接下来,我们将使用“添加”方法向模型添加一个层。print("Creatingthemodel")model=tf.keras.Sequential()model.add(tf.keras.layers.Dense(units=1,input_shape=[1]))在训练我们的模型之前创建一个神经网络编译模型,我们将在编译步骤中添加一些额外的设置。我们将设置一个优化器和损失函数来衡量我们模型的准确性。Adam优化是一种随机梯度下降算法,具有基于一阶矩和二阶矩的自适应预算。为此,我们将使用基于均值方差的损失函数,它衡量我们预测的均值方差。我们模型的目标是最小化这个函数。print("Compilingthemodel")model.compile(optimizer=tf.keras.optimizers.Adam(1),loss='mean_squared_error')训练模型我们将使用“fit”方法来训练我们的模型。首先,我们传入自变量或输入变量(X公里)和目标变量(Y英里)。另一方面,我们预测epoch的值。在这个例子中,epoch值为250。一个epoch是对提供的完整X和Y数据的遍历。epoch的值越小,误差越大;反之,epoch的值越大,误差越小。如果epoch的值越大,算法的执行速度就会越慢。print("Trainingthemodel")epochs_hist=model.fit(X_train,y_train,epochs=250)训练模型的控制台评估模型现在我们评估创建的模型,我们可以观察到损失(Training_loss)随着执行的时期数增加,如果训练集数据有意义并且是一个足够大的组,这是合乎逻辑的。print("评估模型")print(epochs_hist.history.keys())#graphplt.plot(epochs_hist.history['loss'])plt.title('与模型相关的错误的演变')plt.xlabel('Epoch')plt.ylabel('TrainingLoss')plt.legend('TrainingLoss')plt.show()从图中我们可以看出用250个epochs训练模型并没有多大帮助,在第50次pass之后,错误不会减少。因此,训练该算法的最佳遍数约为50。进行预测现在我们已经训练了我们的模型,我们可以使用它进行预测。在这个例子中,我们给模型的输入变量赋值100,模型返回预测的英里数:kilometers=100predictedMiles=model.predict([kilometers])print("TheconversionfromKilometerstoMilesisasfollows:"+str(predictedMiles))fromkilometers转换为英里数为62.133785。查看结果milesByFormula=kilometers*0.6214print("公里转换为英里的数学公式如下:"+str(milesByFormula))diference=milesByFormula-predictedMilesprint("Predictionerror:"+str(diference))转换值从公里到英里使用公式:992.19399预测误差为0.00621414。总结在这个例子中,我们看到了如何使用TensorFlow库创建一个模型,该模型学会了自动将千米转换为英里,并且几乎没有错误。TensorFlow用于执行此过程的数学非常简单。基本上,此示例使用线性回归来创建模型,因为输入变量(公里)和输出变量(英里)是线性相关的。在机器学习中,过程中最耗时的部分通常是准备数据。随着时间的推移,我们获得的经验可以帮助我们选择最适合的算法及其设置,但总的来说,这是一项分析测试和改进的任务。