本文的目标是解释一个可用于构建基本LSTM模型的简单代码。我不会讨论和分析结果。这只是为了让您开始编写代码。
创新互联是专业的南京网站建设公司,南京接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行南京网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
我将在本文中使用python编写LSTM代码。环境设置如下:
我建议您下载pycharm IDE并通过IDE将Tensorflow和所有其他库下载到您的项目中。您可以按照以下步骤设置环境。
如果您想手动创建环境,下面列出的是python和Tensorflow的兼容版本以及您需要遵循本文的所有其他库。
注意:不要使用与提到的不同版本的python,因为它可能与给定的Tensorflow版本不兼容。下载scikit-learn时,首先下载NumPy和SciPy软件包。
对于本文,我们将使用在kaggle上发布的信用卡欺诈数据集。我们将使用此数据集来训练我们的LSTM模型,以便对交易是欺诈性交易还是正常交易进行分类。
您可以在此处(https://www.kaggle.com/mlg-ulb/creditcardfraud/version/2)获取数据集表单的csv文件。下载后,将其放入项目中以方便使用。如果您可以在开始使用数据之前浏览数据并阅读并理解每列数据所代表的内容,将会很有帮助。
注意:如果您在机器学习算法(如“随机森林分类器”)上测试,此数据集将提供更好的分数,但我们可以使用此数据集作为构建LSTM模型的起点。此外,您应该记住,此数据集具有非常高的类不平衡。
首先,让我们导入所需Python库。
- import tensorflow as tf
- import pandas as pd
- import numpy as np
- from tensorflow.contrib import rnn
- from sklearn.model_selection import train_test_split
- from sklearn.metrics import f1_score, accuracy_score, recall_score, precision_score
现在,我们必须将所有数据加载到我们的程序中。我们可以使用Pandas来做到这一点
- data = pd.read_csv('creditcard.csv', skiprows=[0], header=None)
上面的Python代码将加载来自csv文件的所有数据,从而省略带有标题的行,因此加载的数据现在看起来像这样:
前5行数据
接下来,我们将加载的数据分成标签和特征。
- features = data.iloc[:, 1:30]
- labels = data.iloc[:, -1]
如果您浏览了信用卡数据,您会注意到其中有31列。第1行代码将数据从第1列(第0列)加载到第30列,作为“特征”。
如kaggle所述,最后一列是指定交易是否存在欺诈行的列。因此,在第二行代码中,我们将最后一列中的数据作为标签加载。
注意:我们正在排除第0列,因为它只提供有关交易顺序的信息,并没有为我们的训练增加实际价值。我们可以根据数据的发生顺序来保留数据的顺序。
我们现在拥有标签和特征,我们需要将这些标签和特征划分为训练集和测试集。我们可以使用scikit-learn的'train test split function'。
- X_train,X_test,y_train,y_test = train_test_split(features, labels, test_size=0.2, shuffle=False, random_state=42)
此功能自动将特征和标签分为测试和训练集。“X_train”和“X_test”是特征的训练和测试集,“y_test”和“y_train”是标签的训练和测试集。参数“test_size”指定测试集应该是整个数据集的20%。“shuffle”参数指定在将数据拆分为测试和训练集之前是否应该对数据进行混洗。这里我们将其设置为false以保留事务的发生顺序。我们使用“random_state”参数,以便每次运行此函数时获得相同的输出。
我们现在要指定我们的超参数
- epochs = 8
- n_classes = 1
- n_units = 200
- n_features = 29
- batch_size = 35
- xplaceholder= tf.placeholder('float',[None,n_features])
- yplaceholder = tf.placeholder('float')
'xplaceholder'占位符包含一批特征数据,'yplaceholder'包含相应批次的标签数据。'xplaceholder'的shape 已被指定为(
我们已完成大部分准备工作,因此,我们现在将设计,训练和测试我们的LSTM模型
- def recurrent_neural_network_model():
- layer ={ 'weights': tf.Variable(tf.random_normal([n_units, n_classes])),'bias': tf.Variable(tf.random_normal([n_classes]))}
- x = tf.split(xplaceholder, n_features, 1)
- print(x)
- lstm_cell = rnn.BasicLSTMCell(n_units)
- outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
- output = tf.matmul(outputs[-1], layer['weights']) + layer['bias']
- return output
让我们理解代码。我将首先解释'recurrent_neural_network_model()'函数内部的代码正在做什么,逐行解释Python代码如下:
- def train_neural_network():
- #1
- logit = recurrent_neural_network_model()
- logit = tf.reshape(logit, [-1])
- #3
- cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit, labels=yplaceholder))
- optimizer = tf.train.AdamOptimizer().minimize(cost)
- with tf.Session() as sess:
- #6
- tf.global_variables_initializer().run()
- tf.local_variables_initializer().run()
- #7
- for epoch in range(epochs):
- epoch_loss = 0 #8
- i = 0
- for i in range(int(len(X_train) / batch_size)): #10
- #11
- start = i
- end = i + batch_size
- #13
- batch_x = np.array(X_train[start:end])
- batch_y = np.array(y_train[start:end])
- #15
- _, c = sess.run([optimizer, cost], feed_dict={xplaceholder: batch_x, yplaceholder: batch_y})
- epoch_loss += c
- i += batch_size
- #18
- print('Epoch', epoch, 'completed out of', epochs, 'loss:', epoch_loss)
- pred = tf.round(tf.nn.sigmoid(logit)).eval({xplaceholder: np.array(X_test), yplaceholder: np.array(y_test)})
- #20
- f1 = f1_score(np.array(y_test), pred, average='macro')
- accuracy=accuracy_score(np.array(y_test), pred)
- recall = recall_score(y_true=np.array(y_test), y_pred= pred)
- precision = precision_score(y_true=np.array(y_test), y_pred=pred)
- #24
- print("F1 Score:", f1)
- print("Accuracy Score:",accuracy)
- print("Recall:", recall)
- print("Precision:", precision)
- train_neural_network()
现在让我们了解'train_neural_network()'函数中的代码是做什么的,逐行解释Python代码如下:
直到这一点,我们讨论的所有代码都不在Tensorflow会话中。从这里开始,所有讨论的代码都将在TensorFlow会话中。
在调用“train_neural_network()”以启动程序之后,Tensorflow会话的起点将是执行开始的位置。
我们正在初始化到目前为止我们已声明的所有全局变量。
到目前为止我们讨论的是模型的训练方面。训练将持续到epochs数达到阈值。
接下来的几行代码用于测试模型。
注意:理想情况下,我们将数据集划分为3组,即训练,验证和测试。我们将保留测试集并使用验证集来查看模型的性能并更改超参数以实现更好的性能。当我们认为模型已经足够改进时,我们只会采用测试集来了解模型的表现。对于本文,我们只使用了两套训练集和测试集来保持简单。
所以,我们终于完成了代码。
我希望本文能帮助您了解使用Tensorflow构建基本LSTM的过程。请注意,此模型是一个非常基本的版本,是构建和改进的良好起点。
网站栏目:使用TensorFlow构建LSTM模型详细教程
URL分享:http://www.csdahua.cn/qtweb/news12/400312.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网