tensorflow2.0中,tensor类型数据到pandas的DataFrame类型

在TensorFlow 2.0中,当需要将网络预测结果从tensor格式导出到Excel时,可以通过Numpy的narray数组进行转换。流程为:tensor -> narray -> DataFrame。这种转换方式方便了数据的进一步分析和处理。
摘要由CSDN通过智能技术生成

tf2.0中,网络的预测结果往往是tensor(类型)。tensor虽然也有一系列大操作,但是不便导出到excel。有没有一种操作可以将tensor转pandas的DataFrame呢?
在tf2.0,可以借助Numpy 的narray数组作为媒介。
t e n s o r ⟶   n a r r a y ⟶   D a t a F r a m e tensor \longrightarrow\ narray \longrightarrow\ DataFrame tensor narray DataF

好的,以下是完整的代码实现: ```python import numpy as np import pandas as pd import tensorflow as tf from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 加载波士顿房价数据集 boston = load_boston() # 将数据集转化为DataFrame格式 boston_df = pd.DataFrame(boston.data, columns=boston.feature_names) boston_df['PRICE'] = boston.target # 数据集标准化处理 scaler = StandardScaler() boston_df_scaled = scaler.fit_transform(boston_df) # 划分训练集、验证集和测试集(6:2:2) X_train, X_test, y_train, y_test = train_test_split(boston_df_scaled[:, :-1], boston_df_scaled[:, -1], test_size=0.2, random_state=42) X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=123) # 构建TensorFlow2.0数据管道 train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)) train_dataset = train_dataset.shuffle(buffer_size=1024).batch(64) val_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val)) val_dataset = val_dataset.batch(64) test_dataset = tf.data.Dataset.from_tensor_slices((X_test, y_test)) test_dataset = test_dataset.batch(64) # 构建线性回归模型 class LinearRegression(tf.keras.Model): def __init__(self): super(LinearRegression, self).__init__() self.dense = tf.keras.layers.Dense(units=1) def call(self, inputs): return self.dense(inputs) # 初始化模型、损失函数、优化器和评估指标 model = LinearRegression() loss_fn = tf.keras.losses.MeanSquaredError() optimizer = tf.keras.optimizers.Adam(learning_rate=0.01) metric = tf.keras.metrics.MeanSquaredError() # 定义交叉验证函数 def cross_validate(model, dataset, loss_fn, metric): losses = [] metrics = [] for x, y in dataset: y_pred = model(x) loss = loss_fn(y, y_pred) losses.append(loss) metric.update_state(y, y_pred) return tf.reduce_mean(losses), metric.result().numpy() # 训练模型 n_epochs = 50 best_loss = np.inf for epoch in range(n_epochs): for x, y in train_dataset: with tf.GradientTape() as tape: y_pred = model(x) loss = loss_fn(y, y_pred) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) # 在验证集上进行交叉验证 val_loss, val_metric = cross_validate(model, val_dataset, loss_fn, metric) if val_loss < best_loss: # 保存最优模型 best_loss = val_loss model.save_weights('best_model.h5') print('Epoch [{}/{}], Train Loss: {:.4f}, Val Loss: {:.4f}, Val Metric: {:.4f}' .format(epoch+1, n_epochs, loss.numpy(), val_loss, val_metric)) # 加载最优模型 model.load_weights('best_model.h5') # 在测试集上进行预测 test_loss, test_metric = cross_validate(model, test_dataset, loss_fn, metric) print('Test Loss: {:.4f}, Test Metric: {:.4f}'.format(test_loss, test_metric)) ``` 以上代码实现了以下内容: 1. 加载波士顿房价数据集,并将其转化为DataFrame格式。 2. 对数据集进行标准化处理,并将其划分为训练集、验证集和测试集(6:2:2)。 3. 使用TensorFlow2.0数据管道构建训练集、验证集和测试集的输入。 4. 构建线性回归模型,并初始化模型、损失函数、优化器和评估指标。 5. 定义交叉验证函数,用于在验证集上进行交叉验证。 6. 训练模型,并在每个epoch结束后在验证集上进行交叉验证,以获取最优模型。 7. 加载最优模型,并在测试集上进行预测,输出测试集的损失和评估指标。 注意:在使用TensorFlow2.0数据管道时,需要将数据集划分为输入和输出两个部分,即`(X_train, y_train)`和`(X_val, y_val)`,并在`tf.data.Dataset.from_tensor_slices()`函数传入这两个部分。在训练模型时,需要使用`GradientTape`记录损失函数对模型参数的梯度,并使用`apply_gradients()`方法更新模型参数。在交叉验证函数,需要使用`update_state()`方法更新评估指标的状态,并使用`result().numpy()`方法获取评估指标的数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值