Msy20070905 2024-07-15 13:18 采纳率: 21.2%
浏览 3

numpy无法转化为tensor

这段代码报valid_freq=1,numpy无法转化为tensor,这里X集是numpy格式

import tensorflow as tf
import numpy as np
import wfdb
import pandas as pd
import ast
from matplotlib import pyplot as plt
import torch
from sklearn.preprocessing import LabelEncoder


def load_raw_data(df, sampling_rate, path):
    if sampling_rate == 100:
        data = [wfdb.rdsamp(path+f) for f in df.filename_lr]
    else:
        data = [wfdb.rdsamp(path+f) for f in df.filename_hr]
    data = np.array([signal for signal, meta in data])
    return data

path = ''
sampling_rate = 100

# load and convert annotation data
Y = pd.read_csv('ptbxl_database.csv', index_col='ecg_id')
Y.scp_codes = Y.scp_codes.apply(lambda x: ast.literal_eval(x))
# Load raw signal data
X = load_raw_data(Y, sampling_rate, path)

# Load scp_statements.csv for diagnostic aggregation
agg_df = pd.read_csv('scp_statements.csv', index_col=0)
agg_df = agg_df[agg_df.diagnostic == 1]

def aggregate_diagnostic(y_dic):
    tmp = []
    for key in y_dic.keys():
        if key in agg_df.index:
            tmp.append(agg_df.loc[key].diagnostic_class)
    return list(set(tmp))

# Apply diagnostic superclass
Y['diagnostic_superclass'] = Y.scp_codes.apply(aggregate_diagnostic)

# Split data into train and test
test_fold = 10
# Train
X_train = X[np.where(Y.strat_fold != test_fold)]
y_train = Y[(Y.strat_fold != test_fold)].diagnostic_superclass
# Test
X_test = X[np.where(Y.strat_fold == test_fold)]
y_test = Y[Y.strat_fold == test_fold].diagnostic_superclass
# tenserflow 训练
print(X_test , y_test)
print(type(y_test))
print(type(X_test))
# <class 'pandas.core.series.Series'>
# <class 'numpy.ndarray'>

#该数据类型
X_test=torch.from_numpy(X_test)
X_train=torch.from_numpy(X_train)

# artificial intelligence and the training
model = tf.keras.models.Sequential([
    # 卷积层
    tf.keras.layers.Conv1D(filters = 96,
                           kernel_size = 3,
                           padding = "same"),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Activation("relu"),
    tf.keras.layers.AveragePooling1D(pool_size = 4,
                                     padding = "valid"),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128,activation = "sigmoid",
                          kernel_regularizer = tf.keras.regularizers.l1()),
    tf.keras.layers.Dense(5, activation = "sigmoid",
                          kernel_regularizer = tf.keras.regularizers.l2())
])

model.compile(optimizer="nadam",
              loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics = ["sparse_categorical_accuracy"])

model.fit(X_train,y_train,
          batch_size = 64,
          epochs = 10000,
          validation_data = (X_test, y_test),
          validation_freq = 1)

history = model.fit(X_train,y_train,
          batch_size = 64,
          epochs = 10000,
          validation_data = (X_test, y_test))
model.summary()

# 可视化
acc=history.history['sparse_categorical_accuaracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss=history.history['loss']
val_loss = history.history['val_loss']

plt.subplot(1,2,1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accurcy')
plt.legend()

plt.subplot(1,2,1)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-15 13:18
    关注

    引自免费微信小程序:皆我百晓生

    你遇到的问题是在将numpy数组转换为TensorFlow的tensor时,发现数据类型不能被正确转换。你的X_testX_train是numpy数组,你试图将它们转换为TensorFlow的tensor。但是,你的目标变量y_testy_train是Pandas的Series类型,不能直接作为模型的标签输入。你需要将它们转换为numpy数组。以下是解决这个问题的步骤:

    首先,确保你的y_testy_train是numpy数组格式。你可以使用.values或者.to_numpy()方法将Pandas Series转换为numpy数组。修改如下:

    y_train = Y[(Y.strat_fold != test_fold).values].diagnostic_superclass
    y_test = Y[Y.strat_fold == test_fold].diagnostic_superclass.values
    

    然后,你可以尝试再次将numpy数组转换为TensorFlow的tensor。这里需要注意的是,由于你的目标变量是分类问题(具有多个类别),你需要确保你的标签是整数类型(integer)。如果你的标签是字符串类型(string),你需要使用.astype(int)将其转换为整数类型。如果你的类别标签已经是整数类型,则可以跳过这一步。然后你可以使用tf.convert_to_tensor()函数将numpy数组转换为TensorFlow的tensor。修改如下:

    y_train = y_train.astype(int)  # 如果你的类别标签是字符串类型,则需要此行转换
    y_test = y_test.astype(int)  # 同上
    
    X_train = tf.convert_to_tensor(X_train)
    X_test = tf.convert_to_tensor(X_test)
    

    另外,你在训练模型时使用的损失函数是SparseCategoricalCrossentropy,这意味着你的目标变量应该是整数类型的类别标签。请确保你的处理方式是正确的。如果你在处理过程中遇到其他问题,请随时向我询问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月15日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见