雾渐起 2024-06-18 19:38 采纳率: 0%
浏览 3

A KerasTensor is symbolic:


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers,Model
import warnings
warnings.filterwarnings('ignore')

def data_processed(train_path,properties_path):
    data1=pd.read_csv(train_path)
    #对于可能的重复项,取最后一天作为售价
    data1.drop_duplicates(subset=['parcelid'], keep='last',inplace=True)
    data1.sort_values('parcelid',ascending=True,inplace=True)

    data2=pd.read_csv(properties_path)
    #去掉含字符行
    data2.drop(columns=['propertycountylandusecode','propertyzoningdesc','taxdelinquencyflag'],inplace=True)
    features=data2[data2.parcelid.isin(data1.parcelid)]
    features.sort_values('parcelid',ascending=True,inplace=True)

    date=pd.to_datetime(data1['transactiondate'])
    #日期处理
    list_date=[]
    for i in date.index:
        list_date.append(int(date[i].strftime('%Y%m%d')))
    # print(features)
    return features,list_date,data1['logerror']
def data_std(a):
    mean=a.mean()
    std=a.std()
    a=(a-mean)/std
    return a
features1,list_date1,logerror1=data_processed("data\\train_2016.csv","data\\properties_2016.csv")
features2,list_date2,logerror2=data_processed("data\\train_2017.csv","data\\properties_2017.csv")
#链接2016年和2017年的数据
features=(pd.concat([features1,features2]).values)
list_date=np.array(list_date1+list_date2)
logerror=(pd.concat([logerror1,logerror2]).values)
#标准化
features=data_std(features)
features=features.astype("float32")
list_date=data_std(list_date)
# list_date=list_date.reshape(len(list_date),-1)
list_date=list_date.astype("float32")
# logerror=logerror.reshape(len(logerror),-1)
logerror=logerror.astype("float32")
# print(features.shape,list_date.shape,logerror.shape)
#合成验证集
i=features.shape[0]
print(features.shape,i)
test_date201610=np.array([201610]*i)
test_date201610=data_std(test_date201610)
test_date201610=test_date201610.reshape(len(test_date201610),-1)
test_date201611=np.array([201611]*i)
test_date201612=np.array([201612]*i)
test_date201710=np.array([201710]*i)
test_date201711=np.array([201711]*i)
test_date201712=np.array([201712]*i)


#输入应该有两个,一个是房屋属性,一个是时间
num_dates=1
num_feas=55
date=keras.Input(shape=(num_dates,),dtype="float32")
fea=keras.Input(shape=(num_feas,),dtype="float32")
model_features=layers.Concatenate()([fea,date])
model_features=layers.Dense(128,activation="relu")(model_features)
model_features=layers.Dense(64,activation="relu")(model_features)
outputs=layers.Dense(1)(model_features)
model=keras.Model(inputs=[fea,date],outputs=outputs)
model.compile(optimizer="rmsprop",loss="mse",metrics=["mae"])
print(model.summary())
print(features.shape,list_date.shape,logerror.shape)
print(type(features[0][0]),type(list_date[0]),type(logerror[0]))
print(type(features[0]),type(test_date201610[0]))
print(type(features),type(list_date),type(logerror),type(test_date201610))
model.fit([fea,date],logerror,epochs=20,batch_size=64)
loss,accuracy = model.evaluate([features,list_date],logerror)
print('\ntest loss',loss)
print('accuracy',accuracy)
# x=model.predict([features,test_date201610])
# print(x)

类型也改了,大小也对齐了,搞不懂为啥还会报错

img

  • 写回答

2条回答 默认 最新

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

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

    从提供的信息来看,主要的问题在于尝试将KerasTensor对象feadate直接传递给模型训练函数model.fit()时,而这些对象实际上并没有被赋值具体的数据。在模型训练阶段,feadate应当是包含实际训练数据的数组或张量,而非模型输入层的占位符。为了解决这个问题,你需要确保在调用model.fit()时传入的是具体的训练数据,即featureslist_date

    下面是修正后的代码段,其中我修改了模型训练部分以正确地使用featureslist_date数据:

    # 此处省略了数据预处理和模型定义的部分
    
    # 在训练模型前,将输入数据转换为列表形式,以便与模型输入匹配
    # 注意:这里的features和list_date应是你之前预处理过的数据
    
    model.fit([features, list_date], logerror, epochs=20, batch_size=64)
    
    # 其他部分保持不变
    

    在上述代码中,featureslist_date应当是经过预处理的、用于训练的特征和时间数据。这些数据在模型训练时作为实际输入传递给模型。同时,logerror作为目标变量用于监督学习。

    此外,确保featureslist_date的形状与模型输入层的形状相匹配。在这个例子中,features应该是(样本数, 特征数)的形状,而list_date应该是(样本数,)的形状,因为它的维度被指定为1。

    如果在运行修正后的代码时遇到其他错误,比如数据形状不匹配或类型错误,请检查数据预处理步骤,确保所有数据都是正确的格式和形状,并且符合模型的预期输入。如果需要进一步的帮助,可以提供更详细的错误信息或描述遇到的具体问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月18日

悬赏问题

  • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!