繁体   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