0


神经网络实验报告-tensorflow基础

1、实验目的

    掌握TensorFlow低阶API,能够运用TensorFlow处理数据以及对数据进行运算。

2、实验内容

    ①实现张量维度变换,部分采样等;

    ②实现张量加减乘除、幂指对数运算;

    ③利用TensorFlow对数据集进行处理。

3、实验过程

题目一

    加载波士顿房价数据集,并按照以下要求选择属性、计算并绘图。(20分)

    ⑴ 以二维数组的形式显示属性NOX、RM和LSTAT,其中每一行为一个样本,每一列为一个属性或房价。(4分)

    ⑵ 选择属性RM和房价,绘制散点图。其中每个样本的属性值为**x****i**,每个样本的房价为**y****i**,  **i**为样本的索引值。(2分)

    ⑶ 使用TensorFlow分别计算**w**和**b**,并输出结果。(10分)

⑶ 以w为斜率,b为截距,做出一条直线,和第⑵问的散点图绘制在同一张图上。(3分)

⑷ 观察这条直线和散点之间的位置关系,你有什么发现或者猜测。

①代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

# 加载数据集
boston = load_boston()
data = boston.data
target = boston.target

# 选择属性NOX、RM和LSTAT,每一列为一个属性或房价
subset = data[:, [4, 5, 12]]
subset = np.hstack((subset, target.reshape(-1, 1)))

# 绘制散点图
plt.scatter(subset[:, 0], subset[:, 3], alpha=0.5)
plt.xlabel('RM')
plt.ylabel('Price')
plt.show()

# 计算w和b
x = subset[:, 0].reshape(-1, 1)
y = subset[:, 3].reshape(-1, 1)
x_mean = np.mean(x)
y_mean = np.mean(y)
w = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean) ** 2)
b = y_mean - w * x_mean
print("w的值为:%.2f" % w)
print("b的值为:%.2f" % b)

# 绘制直线
x_range = np.linspace(np.min(x), np.max(x), 100).reshape(-1, 1)
y_pred = w * x_range + b
plt.scatter(subset[:, 0], subset[:, 3], alpha=0.5)
plt.plot(x_range, y_pred, color='red', linewidth=2)
plt.xlabel('RM')
plt.ylabel('Price')
plt.show()

②实验结果

    实验结果自己截图

③常见错误

    如遇到以下错误
load_boston` has been removed from scikit-learn since version 1.2
    也就是1.2库中的load_boston方法被移除。可以先把安装的scikit包卸载了,然后在终端里运行下面指令
pip install scikit-learn==1.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
    它也有可能让你升级pip,复制提示给你的指令在终端里运行,之后再运行上面的代码,即可解决

题目二:

    使用TensorFlow张量运算计算**w**和**b**,并输出结果。(20分)

已知:

** x**=[ 64.3, 99.6, 145.45, 63.75, 135.46, 92.85, 86.97, 144.76, 59.3, 116.03]

** y**=[ 62.55, 82.42, 132.62, 73.31, 131.05, 86.57, 85.49, 127.44, 55.25, 104.84]

计算:

    其中,xi是**x**中索引值为**i**的元素;是**y**中索引值为**i**的元素;**n**是张量中元素的个数;

(3)分别输出wb的结果。

①代码

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 定义数据
x = tf.constant([64.3, 99.6, 145.45, 63.75, 135.46, 92.85, 86.97, 144.76, 59.3, 116.03])
y = tf.constant([62.55, 82.42, 132.62, 73.31, 131.05, 86.57, 85.49, 127.44, 55.25, 104.84])

# 计算w和b
n = tf.cast(tf.shape(x)[0], tf.float32)
w = (n * tf.reduce_sum(x * y) - tf.reduce_sum(x) * tf.reduce_sum(y)) / (n * tf.reduce_sum(x ** 2) - tf.reduce_sum(x) ** 2)
b = (tf.reduce_sum(y) - w * tf.reduce_sum(x)) / n

# 输出w和b
print("w的值为:%.2f" % w.numpy())
print("b的值为:%.2f" % b.numpy())

②实验结果

    自己截图

题目三

已知:

    x1=[137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00,114.00, 106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21]

    x2=[3, 2, 2, 3, 1, 2, 3, 2, 2, 3, 1, 1, 1, 1, 2, 2]

    y =[145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00,91.00, 62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30]

按要求计算:(20分)

(1)创建一个16×3的二维数组X,其中第一列全为1,第二列和第三列中分别为数组x1和x2中的数据,并输出。

(2)将数组y转换为16×1的二维数组Y,并输出。

(3)根据前两问得出的X和Y,利用如下公式,求W

①代码

import numpy as np

# 定义数据
x1 = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00, 106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
x2 = np.array([3, 2, 2, 3, 1, 2, 3, 2, 2, 3, 1, 1, 1, 1, 2, 2])
y = np.array([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00, 62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])

# (1)创建16×3的二维数组X,并输出
X = np.column_stack((np.ones_like(x1), x1, x2))
print("X的值为:\n", X)

# (2)将数组y转换为16×1的二维数组Y,并输出。
Y = y.reshape(-1, 1)
print("Y的值为:\n", Y)

# (3)根据前两问得出的X和Y,求W。
XT_X = X.T.dot(X)  # 计算X转置乘以X
XT_Y = X.T.dot(Y)  # 计算X转置乘以Y
W = np.linalg.inv(XT_X).dot(XT_Y)  # 求解W
print("W的值为:\n", W)

②实验结果

    自己截图

4、实验小结&讨论题

① 实验过程中遇到了哪些问题,你是如何解决的?

** **没遇到问题

② 在实现数组运算时,采用NumPy和TensorFlow各有什么特点?你认为编程时如何选择或使用它们更合理?需要注意哪些问题?

    在实现数组运算时,NumPy和TensorFlow都有其特点。NumPy是Python中最重要的科学计算库之一,提供了多维数组、矩阵等数值计算功能,具有良好的数据处理能力和高效的计算性能,并且拥有丰富的函数库,可以进行数据加工、处理、筛选等操作。而TensorFlow则是一个由Google开发的机器学习框架,可以用来构建和训练神经网络等深度学习模型,提供灵活的数据流图模型,支持分布式计算和高效的GPU加速,专注于可扩展性和生产环境部署。

    在采用NumPy和TensorFlow时,需要结合具体的应用场景进行考虑,如果只是需进行简单的计算和处理时,使用NumPy较为合适; 如果涉及到深度学习等领域,则可以考虑使用TensorFlow。有些情况下两者也可能同时使用,比如使用TensorFlow的API对数据进行预处理、数据归一化等操作后,再将其转换为NumPy数组进行处理。在选择或使用时,需要注意库的正确安装、数据类型和维度匹配、内存占用和性能、算法的正确性以及合理利用官方文档和社区资源等问题,以避免出现错误结果。

③ 在题目基本要求的基础上,你对每个题目做了那些扩展和提升?或者你觉得在编程实现过程中,还有哪些地方可以进行优化?(可以从如何提高代码的简洁度来谈谈这个问题)

    完全按题目要求,没有改进与提升

本文转载自: https://blog.csdn.net/qq_33866936/article/details/130031799
版权归原作者 Specium. 所有, 如有侵权,请联系我们删除。

“神经网络实验报告-tensorflow基础”的评论:

还没有评论