weixin_55047180 2021-06-24 11:30 采纳率: 0%
浏览 30

Feature y is not in features dictionary.

任务是拟合二输入线性函数y=x1+2*x2,先用TensorFlow读取csv文件,然后训练神经网络,代码如下:

import numpy as np

from keras.models import Sequential

from keras.layers import Dense

import functools

train_file_path = "./datas/二输入数据表.csv"

test_file_path = "./datas/二输入测试数据表.csv"

LABEL_COLUMN = 'y'

import tensorflow as tf

OUTPUT = 'y'

def get_dataset(file_path):

    dataset = tf.data.experimental.make_csv_dataset(

    file_path,

    batch_size=4,

    label_name=OUTPUT,

    num_epochs=1,

    ignore_errors=True)

    return dataset

raw_train_data = get_dataset(train_file_path)

raw_test_data = get_dataset(test_file_path)

examples,labels = next(iter(raw_train_data))

print("EXAMPLES: \n",examples,"\n")

print("LABELS: \n",labels)

def process_continuous_data(mean,data):

    data = tf.cast(data,tf.float32) * 1/(2*mean)

    return tf.reshape(data,[-1,1])

MEANS = {

    'x1' : 7.149044577,

    'x2' : 13.07613598,

    'y' : 33.30131655

}

numerical_columns = []

for feature in MEANS.keys():

    num_col = tf.feature_column.numeric_column(

    feature,normalizer_fn=functools.partial(process_continuous_data,MEANS[feature]))

    numerical_columns.append(num_col)

numerical_columns

preprocessing_layer = tf.keras.layers.DenseFeatures(numerical_columns)

model = Sequential([

    preprocessing_layer,

    tf.keras.layers.Dense(4,activation='relu'),

    tf.keras.layers.Dense(1)

]

)

 

model.compile(optimizer = 'rmsprop',loss="mse",metrics=['mae'])

model.fit(raw_train_data,epochs=20)

 

 

报错情况:

https://img-ask.csdnimg.cn/upload/1624504196490.png?x-oss-process=image/auto-orient,1/resize,w_320,m_lfit

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-06 17:46
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    此代码存在报错问题,需要仔细检查一下代码。以下是建议的修改方案和解释:
    1. 导入库时,将keras改为tensorflow.keras。因为在TensorFlow 2.x中,Keras已经被集成到tf.keras中。
    2. LABEL_COLUMN的赋值不必要,可以删除。
    3. OUTPUT的赋值应该是'y',而不是LABEL_COLUMN。
    4. DenseFeatures和Dense层需要指定输入的维度。而在本代码中,由于样本特征数目是2,numeric_column默认的shape是(),需要通过指定shape来给numeric_column设置正确的shape。(注:此问题是本次代码报错的原因)
    5. 在model.compile函数中,loss应该为字符串类型,即'mse'而不是"mse"。
    6. 由于数据量比较小,batch size应该设置为一个较大的值,比如32或64。 修改后的代码如下:
    import numpy as np
    import tensorflow as tf
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense, DenseFeatures
    import functools
    train_file_path = "./datas/二输入数据表.csv"
    test_file_path = "./datas/二输入测试数据表.csv"
    OUTPUT = 'y'
    def get_dataset(file_path):
        dataset = tf.data.experimental.make_csv_dataset(
            file_path,
            batch_size=32, 
            label_name=OUTPUT,
            num_epochs=1,
            ignore_errors=True)
        return dataset
    raw_train_data = get_dataset(train_file_path)
    raw_test_data = get_dataset(test_file_path)
    examples, labels = next(iter(raw_train_data))
    print("EXAMPLES: \n", examples, "\n")
    print("LABELS: \n", labels)
    def process_continuous_data(mean, data):
        data = tf.cast(data, tf.float32) * 1/(2*mean)
        return tf.reshape(data, [-1, 1])
    MEANS = {
        'x1' : 7.149044577,
        'x2' : 13.07613598,
        'y' : 33.30131655
    }
    numerical_columns = []
    for feature in MEANS.keys():
        num_col = tf.feature_column.numeric_column(
            feature,
            normalizer_fn=functools.partial(process_continuous_data, MEANS[feature]),
            shape=(1,)
        )
        numerical_columns.append(num_col)
    preprocessing_layer = DenseFeatures(numerical_columns)
    model = Sequential([
        preprocessing_layer,
        Dense(4, activation='relu'),
        Dense(1)
    ])
    model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
    model.fit(raw_train_data, epochs=20)
    这个代码还可以进一步优化。比如,可以添加更多的层和神经元来改进模型的性能,在模型训练结束后,可以使用神经网络来预测测试数据的输出。以下是一个预测测试数据输出的代码:
    raw_test_data = get_dataset(test_file_path)
    test_examples, test_labels = next(iter(raw_test_data))
    predictions = model.predict(test_examples)
    print("Predictions: \n", predictions.numpy())
    print("Labels: \n", test_labels.numpy())
    可以打印出模型的预测值和真实值来进行验证。
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵