python 数据分析 损失数值 如何放到csv中呢 人工智能 深度神经网络,Pytorch ,tensorflow

损失数值 如何放到csv中呢 

在Python中,使用`csv`模块将数据写入CSV文件是一种常见的操作。从你提供的代码片段来看,你想要将损失数值写入名为`middle_losse.csv`的文件中。但是,你提供的代码片段中存在一些需要修改的地方,以确保数据能够正确地写入CSV文件。

首先,`csv.writer`对象的`writerows`方法需要一个可迭代对象,例如列表的列表,而不是单个列表。如果你的`last_loss`是一个列表,你不能直接使用`zip(last_loss)`,因为`zip`会尝试将`last_loss`与自身进行配对,这通常不是你想要的结果。

如果你想要将`last_loss`列表中的每个元素作为单独的一行写入CSV文件,你应该这样做:

```python
import csv

# 假设 self.losses 是一个字典,其中包含损失数值的列表
# 假设 global_step 是一个变量,表示当前的训练步数

with open('loss_csv/middle_loss.csv', 'w', newline='') as f:  # 文件名可能有误,应该是 middle_loss.csv 而不是 middle_losse.csv
    writer = csv.writer(f)
    
    # 写入标题行
    writer.writerow(['Global Step', 'Loss'])
    
    # 写入损失数值
    for step, loss in enumerate(self.losses['g'], start=1):  # 假设从第1步开始计数
        writer.writerow([step, loss])
```

这段代码首先打开文件,然后创建一个`csv.writer`对象。接着,它写入标题行,表示接下来的数据将包含全局步数和损失数值。之后,它遍历`self.losses['g']`列表中的每个元素,并将每个元素与对应的步数一起作为一行写入CSV文件。

请注意,我假设`self.losses['g']`是一个包含损失数值的列表,并且`global_step`是一个表示当前训练步数的变量。如果`global_step`是你想要记录的最后一个步数,你可以相应地调整代码来写入这个特定的值。

=======================================================================

如果这样写法 ,csv输出的是时候 每一行就一个数据的

num_epochs = 25000
progress_bar = trange(num_epochs)

global_step = []
global_loss = []

for epoch in progress_bar:

    # loss = svi.step(x_train, y_train)
    for datax, datay in trainloader:
        # loss += svi.step(datax.view(-1, 32), datay)
        # print(datax)
        # print(datay)
        # loss = svi.step(datax.view(1, -1), datay.view(1, -1))
        # print(datax.shape)
        # print(datay.shape)
        # datax = datax.view(1, -1)
        # datay = datay.view(1, -1)
        # print(datax.shape)
        # print(datay.shape)
        # datax = datax.view(-1, 1)
        # datay = datay.view(-1, 1)
        # print(datax.shape)
        # print(datay.shape)
        loss = svi.step(datax, datay)
        progress_bar.set_postfix(loss=f"{loss / datax.shape[0]:.3f}")

    # 将计算得到的step和loss添加到对应的列表中
    global_step.append(epoch)
    global_loss.append(loss / datax.shape[0])
    with open('loss_csv/middle_loss.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        # 这个运行结果是
        # writer.writerow(['Gloss'])
        # writer.writerow([self.losses['GP'][-1]])
        # writer.writerow(['global_step'])
        # writer.writerow([global_step])
        writer.writerow(['global_loss'])
        writer.writerows(zip(global_loss))
        writer.writerow(['global_step'])
        writer.writerows(zip(global_step))

global_loss
10166.450654457323
15605.151778484695
7788.397715842351
6380.42300617788
5724.394193498418
5359.894453747198
5571.510530438274
5492.6588832447305
5959.183144038543
5003.404720528051
4428.47156913206
4251.24302707985
global_step
0
1
2
3
4
5
6
7
8
9

==============================================================
 

如果你想要记录每一个损失值,并且每个损失值都对应一个全局步数(global step),你可以按照以下方式修改代码:

```python
import csv

# 假设 self.losses 是一个字典,其中 'g' 键对应的值是一个列表,包含损失值
# 假设 global_steps 是一个与 self.losses['g'] 长度相同的列表,包含每个损失值对应的全局步数

with open('loss_csv/middle_loss.csv', 'w', newline='') as f:  # 确保文件名正确
    writer = csv.writer(f)
    
    # 写入标题行
    writer.writerow(['Global Step', 'Loss'])

    # 假设 global_steps 和 self.losses['g'] 已经按照全局步数排序
    for global_step, loss in zip(global_steps, self.losses['g']):
        writer.writerow([global_step, loss])
```

这段代码首先打开文件`middle_loss.csv`进行写入,然后创建一个`csv.writer`对象。接着,它写入标题行,表示接下来的数据将包含全局步数和对应的损失值。之后,它使用`zip`函数同时遍历`global_steps`列表和`self.losses['g']`列表,将每个全局步数和对应的损失值作为一行写入CSV文件。

请注意,这里假设`global_steps`是一个列表,包含了每个损失值对应的全局步数,且这个列表与`self.losses['g']`列表的长度相同,并且是按照全局步数排序的。如果`global_steps`列表不存在,你需要根据你的实际情况来生成这个列表。如果每个损失值都对应相同的全局步数,你可以简单地使用一个范围对象来生成步数,例如:

```python
# 假设损失值的数量
num_losses = len(self.losses['g'])

# 生成全局步数列表
global_steps = list(range(1, num_losses + 1))

# 然后使用上面的代码将数据写入CSV
```

这样,你就可以记录每一个损失值及其对应的全局步数了。
 

==========================================================

如果每一行记录所有咧

    with open('loss_csv/middle_loss.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        # 假设global_loss和global_step已经是按顺序排列好的列表
        # 并且它们的长度相同
        # 写入列名
        writer.writerow(['global_step', 'global_loss'])
        # 遍历步数和损失值列表,每次迭代获取一个步数和一个损失值
        for step, loss in zip(global_step, global_loss):
            # 写入一行数据,包括步数和对应的损失值
            writer.writerow([step, loss])
global_step,global_loss
0,6631.609640985727
1,5183.373958203942
2,5322.453822169453
3,4827.54164141044
4,5024.337589444593
5,4474.316665165126
6,4577.467127677053

你可能感兴趣的:(python,人工智能,数据分析)