import tensorflow as tf
print('Tensorflow Version: {}'.format(tf.__version__))
会输出Tensorflow的版本,且将其形式化(format),括号里面的是tf. 两个下划线 version 两个下划线。
import pandas as pd
pandas库是一个强大的分析结构化数据的工具集,主要用于数据挖掘和数据分析,同时也提供数据清洗功能。其数据类型为Series和DataFrame。
Series类型由一组数据及与之相关的数据索引组成,如:
其中a处的输出中:0 1 2 3是自动索引,int64是numpy中的数据类型。b处的输出中index作为第二个参数,a b c d是自定义索引。
可以通过b.index
获得索引,通过b.values
获得数据。
DataFrame类型由共用相同索引的一组列组成,如:
其中,0 1 2 3 4是自动列索引,0 1是自动行索引。
数据会根据行列索引自动补齐。
data = pd.read_csv('./Income1.csv')
data
读取csv文件,其中'./Income1.csv'
前面的点表示在当前文件夹中,且tf中表示文件地址要么用\\要么用/
此结果会输出csv文件的表格如下:
import matplotlib.pyplot as plt
%matplotlib inline
使用魔术方法,直接显示在行里,不以弹窗的形式显示。
matplotlib.pyplot主要用来生成绘图,直方图、功率谱、条形图、错误图、散点图等,是一个python的2D绘图库。
grid方法可为图添加网格线,.lw代表线的粗细,.alpha表示线的明暗程度。
axis方法若没有任何参数,则返回当前坐标轴的上下限。还可以通过xlim,ylim方法设置坐标轴范围。
plt.scatter(data.Education, data.Income)
scatter()函数是用于绘制散点图的。之前定义了data,它有两列,一列是Education,一列是Income,所以用上面的代码来将data.Education定义为x轴,将data.Income定义为y轴。
就会得到以下结果:
从图中可以看出受教育年限和收入实际上是一种线性关系。
接下来需要建立模型来预测收入值:
使用单变量线性回归算法f(x) = ax + b,去求a和b的值。首先要定义损失函数L为预测值f(x)和真实值y的均方差[f(x)-y]2/n。那么任务就变成了需要找到合适的a和b,使得均方差的值越小越好。在这个过程中,采用梯度下降算法来优化。
首先要把变量x和真实值y定义出来:
x = data.Education
y = data.Income
之后建立模型:
model = tf.keras.Sequential()
使用顺序模型。顺序模型就是有一个输入和一个输出,它们之间的网络是顺序搭建的,就像一层一层搭积木一样。初始化了我们所要建立的模型。
接下来给初始化的模型中添加层:
model.add(tf.keras.layers.Dense(1, input_shape=(1,)))
用model.add()来添加所需要的神经层。layers里面有很多层的种类可以选择,常用的有Dense层(全连接神经网络层),它的参数有两个,分别为输出的单元数,即输出数据的维度;输入数据的形状。
在此案例中,因为关系式为f(x) = ax + b,所以输出数据的维度就是1;输入的数据也是一个一维的数据x,所以输入数据的shape是1,但要用元组的形式表示,所以写为(1,)。
model.summary()
此代码可以反映模型整体的形状,如下:
它是一个dense层,它的output shape是(none, 1),对于这种神经网络,第一个数是代表样本的个数,在建立模型的时候不需要去考虑,比如输入100个数,就会显示(100, 1);第二个数代表输出的维度1。它的Param(参数)是2,表示它有两个参数。它有两个参数,但是输出为1,所以dense层是根据输入初始化两个变量a和b,将其变化为ax+b的形式,输出的仍是1个维度的预测值。
模型建立完成后,可以对其进行编译:
model.compile(optimizer='adam',
loss='mse'
)
在keras中需要编译,即配置的过程,但在自定义循环中无需编译这个过程了。
model.compile()方法用于在配置训练方法中,其形式为:
在这里我们使用梯度下降算法对损失函数进行优化,因此在这里优化方法optimizer选择’adam’,损失函数loss使用均方差(MeanSquaredError, mse)去衡量。
配置好模型之后,就可以对其进行训练:
history = model.fit(x, y, epochs=5000)
接下来就可以使用这个模型进行预测了:
model.predict(x)
不对顺序进行打乱,对之前的x进行预测,输出的还是y。
model.predict(pd.Series([20]))
用series的形式对x=20来进行预测。
补充!:在 Keras 中,我们可以通过组合层来构建模型,直接堆叠各个层。整个过程可分为五步:
1创建Sequential模型,
2添加所需要的神经层,
3使用.compile方法确定模型训练结构,
4使用.fit方法使模型与训练数据“拟合”,
5.predict方法进行预测。