簡體   English   中英

ValueError: 層 conv1d 的輸入 0 與層不兼容: : 預期 min_ndim=3, 發現 ndim=2

[英]ValueError: Input 0 of layer conv1d is incompatible with the layer: : expected min_ndim=3, found ndim=2

所以我正在修改一些用於時間序列預測的代碼。 我之前處理過這個錯誤(我的數據格式錯誤)。 但在這種情況下,我無法弄清楚我做錯了什么。 這是問題的根源

    monk= tf.keras.models.Sequential()
    monk.add(tf.keras.layers.Flatten())
    monk.add(tf.keras.layers.Conv1D(64,2,input_shape=(X_train.shape[1],X_train.shape[2])))
    monk.add(tf.keras.layers.MaxPool1D())
    monk.add(tf.keras.layers.Activation('relu'))
    monk.add(tf.keras.layers.Dense(32))
    monk.add(tf.keras.layers.Dense(1,'sigmoid'))
    monk.compile('adam','binary_crossentropy',['accuracy'])
    monk.fit(X_train,y_train,epochs=10)

其中 X_train 的形狀為 (100,5,1),y_train 的形狀為 (100,)

完全可重現的代碼

from random import shuffle
from torch import are_deterministic_algorithms_enabled
import yfinance as yf
import tensorflow as tf
import datetime 
import time
import numpy as np
def retrain(symbol):

    todayy  = [int(item) for item in str(datetime.datetime.today()).split(' ')[0].split('-')]
    start = datetime.datetime(todayy[0]-2,todayy[1],todayy[2])
    end = datetime.datetime(todayy[0],todayy[1],todayy[2])
    stock = yf.download(symbol,start=start,end=end)
    print(stock)
    buy = []
    for x in range(stock.shape[0]):
        open = stock.iloc[x]['Open']
        close=stock.iloc[x]['Close']
        if close-open>0:
            buy.append(1)
        else:
            buy.append(0)
    print(buy)
    X = []
    y= []
    temp=[]
    for x in range(len(buy)):
        item = buy[x]
        temp.append(np.array([item]))
        if len(temp)>=5:
            X.append(np.array(temp))
            temp=[]
            try:
                y.append(buy[x+1])
            except: 
                break
    buyz=[]
    sellz=[]
    for item in list(zip(X,y)):
        print(item)
        if item[1]==1:
            buyz.append(item)
        else:
            sellz.append(item)
    
    buyz = buyz[:min(len(buyz),len(sellz))]
    selzz = sellz[:min(len(buyz),len(sellz))]
    
    all = []
    for item in buyz:
        all.append(item)
    for item in sellz:
        all.append(item)
    shuffle(all)
    X_train = []
    y_train =[]
    for item in all:
        print(item)
        X_train.append(item[0])
        y_train.append(item[1])
    #input()
    X_train=np.array(X_train)
    y_train=np.array(y_train)
    print(X_train)
    print(y_train)
    print(X_train.shape)
    print(y_train.shape)
    monk= tf.keras.models.Sequential()
    monk.add(tf.keras.layers.Flatten())
    monk.add(tf.keras.layers.Conv1D(64,2,input_shape=(X_train.shape[1],X_train.shape[2])))
    monk.add(tf.keras.layers.MaxPool1D())
    monk.add(tf.keras.layers.Activation('relu'))
    monk.add(tf.keras.layers.Dense(32))
    monk.add(tf.keras.layers.Dense(1,'sigmoid'))
    monk.compile('adam','binary_crossentropy',['accuracy'])
    monk.fit(X_train,y_train,epochs=10)
    #print(monk(X))
            
        
retrain('LEVI')
 

任何幫助將非常感激。

刪除tf.keras.layers.Flatten() ,因為它會將您的 3D 張量(batch size, timesteps, features)展平為(batch size, features)

您應該在tf.keras.layers.Activation('relu')之后再次添加Flatten層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM