Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras-稠密_3的稠密度(6,)错误,但应为(1,)_Python_Machine Learning_Keras_Neural Network - Fatal编程技术网

Python Keras-稠密_3的稠密度(6,)错误,但应为(1,)

Python Keras-稠密_3的稠密度(6,)错误,但应为(1,),python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我正在学习神经网络,我想创建一个模型,预测该领域的价值。 为了简化,我创建了一个0、1、2、3、4或5的 我所做的事情: 修改数据帧、筛选数据等 将域名标记为二维整数数组(基于字符) 拆分为X、y列、测试 编译模型 输出应该是0到5个整数,所以我认为最后一层应该是(6,)形状。但很明显,有些地方出了问题 ValueError:检查目标时出错:预期密集_3具有形状 (6,)但得到了形状为(1,)的数组 你知道怎么做吗 from datetime import timedelta, date, da

我正在学习神经网络,我想创建一个模型,预测该领域的价值。 为了简化,我创建了一个
0、1、2、3、4或5的

我所做的事情:

  • 修改数据帧、筛选数据等
  • 将域名标记为二维整数数组(基于字符)
  • 拆分为X、y列、测试
  • 编译模型
  • 输出应该是0到5个整数,所以我认为最后一层应该是(6,)形状。但很明显,有些地方出了问题

    ValueError:检查目标时出错:预期密集_3具有形状 (6,)但得到了形状为(1,)的数组

    你知道怎么做吗

    from datetime import timedelta, date, datetime
    import json
    import locale
    
    from keras import Sequential
    from keras.layers import Dense
    from keras_preprocessing.sequence import pad_sequences
    from keras_preprocessing.text import Tokenizer
    import pandas as pd
    from sklearn.model_selection import train_test_split
    
    locale.setlocale(locale.LC_ALL, '')
    LISTINGS_JSON_PATH = '....path to json'
    
    def get_drank(rank):
        if rank>5:
            return 5
        return rank
    
    with open(LISTINGS_JSON_PATH) as f:
        d = json.loads(f.read())
    
    today = datetime.combine(date.today(), datetime.min.time())
    df = pd.DataFrame(d['data'])
    df = df[['domainName', 'auctionEndTime', 'numberOfBids']]
    df['domainName'] = df['domainName'].str.lower()
    df['auctionEndTime'] = pd.to_datetime(df['auctionEndTime'].str.slice(0, 10), format='%Y-%m-%d')
    df['days_to_end'] = df['auctionEndTime'].apply(lambda x: (x - today).days + 1)
    df['rank'] = df['numberOfBids'] * (df['days_to_end'])
    df['drank'] = df['rank'].apply(lambda x:get_drank(x))
    df = df[(df['rank'] != 0.0)|(df['days_to_end']==0.0)]
    
    tk = Tokenizer(num_words=None, char_level=True)
    tk.fit_on_texts(df['domainName'])
    sequences = tk.texts_to_sequences(df['domainName'])
    sequences = pad_sequences(sequences, padding='post')
    
    X_train, X_test, y_train, y_test  = train_test_split(sequences, df['drank'], test_size=0.2, random_state=1)
    
    print(X_train)
    print(X_test)
    
    model = Sequential([
        Dense(32, activation='relu', input_shape=(sequences[0].__len__(),)),
        Dense(32, activation='relu'),
        Dense(6, activation='softmax'),
    ])
    
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy', )
    
    hist = model.fit(X_train, y_train,
                     batch_size=32, epochs=10,
                     validation_data=(X_test, y_test))
    
    输出:

    输出应该是0到6个整数,所以我认为最后一层应该是(4,)形状

    我不知道你这句话是什么意思。你是指形状(1)还是形状(7)

    首先,您需要确定
    应该是序数还是标称

    在序数情况下,这意味着输出标签的整数值顺序很重要。例如,如果输出为1或0,其中1表示高,0表示低,则排序
    0<1
    在逻辑上是合理的。然后,如果输出shape
    Y\u train,Y\u test
    为shape(1,),则需要将损失函数更改为
    loss=sparse\u categorical\u cross\u entropy

    在名义上的情况下,顺序并不重要。例如,如果y的值介于APPLE、ORANGE和BANANA之间,那么我们可能会有一个如下的数组:

    # Original data: 0=apple, 1=orange, 2=banana
    y = [ [2], [0], ...]
    # One hot encoded
    y = [ [0,0,1],  # For banana
          [1,0,0],  # for apple
        ]
    

    其中,
    APPLE
    没有任何意义。这可以通过使用
    sklearn.preprocessing.onehotcoder
    来完成,并将目标转换为上面的形状,您的模型架构应该可以工作。

    对不起,我是说0,1,2,3,4,5所以形状(6),在这种情况下,错误是因为损失函数
    分类交叉熵
    预测形状(6,)的输出但只收到一个整数目标来训练。如果你试图解决的问题是名义上的,一个热编码的目标标签,它应该工作。
    # Original data: 0=apple, 1=orange, 2=banana
    y = [ [2], [0], ...]
    # One hot encoded
    y = [ [0,0,1],  # For banana
          [1,0,0],  # for apple
        ]