含有默认值的参数必须放到不含默认值的后面。
def ConvBNReluUnit(kernel_size = 8,index = 0,num=1,input):
解决:调换一下参数的位置
def ConvBNReluUnit(input1,kernel_size = 8,index = 0,num=1):
一般由两种情况引起:一种是函数参数为路径而非文件名称,另一种是函数参数带有中文。
学习
我出现问题是因为路径含有中文。
解决办法:
da4=pd.read_csv('F:\\工程清单.csv',engine='python')
往模型里加lstm层,产生的错误
原因是lstm层需要3维数据,而我的是4维
下例:
res_stack_d (Conv2D) (None, 125, 2, 16) 784
res_stack_e (Conv2D) (None, 63, 2, 32) 1568
所以需要将其reshape维数为3维,这里用到keras内的Reshape函数
解决:
model.add(Conv2D(64, kernel_size=(3, 1), strides=(2, 1), padding='valid'))
model.add(Conv2D(64, kernel_size=(3, 1), strides=(1, 1), padding='same'))
model.add(Reshape((60,64)))
model.add(LSTM(units=100,return_sequences = True))
提前算好卷积层的输出,并进行reshape操作。
这里有一个误区:
为什么明明lstm层需要的是3维数据,而我这里的reshape内只有2维的(60,64)呢?
其实是这里少了一个None
正常的模型对样本个数都是不做固定要求的,输入模型的可以是(None,1024,1024)
模型中间层也可以处理类似(None,1024,1024)的输入
所以算上None刚好是三维,这里的Reshape函数就不考虑这个None,直接输入后面两维进行Reshape
参考链接
我理解如果要使用多输入模型或者类似Resnet的网络,就不能用
model = Sequential()
这种序列模型,而是应该直接用API模型,具体见
例如:
sig_input = Input(shape=input_shape,name='Input')
x = sig_input
x = Conv2D(8, kernel_size=(3, 1), strides=(2, 1), padding='same', input_shape = (X_train.shape[1:]),name =conv_name_base+"a")(x)
x = BatchNormalization(name=bn_name_base + 'a')(x)
#x = add([x, sig_input])
#x = Activation('relu')(x)
x = Conv2D(8, kernel_size=(3, 1), strides=(1, 1), padding='same',name =conv_name_base+"b")(x)
https://blog.csdn.net/wang7807564/article/details/78164855
https://blog.csdn.net/qq_35892623/article/details/82941473
对我都用处不大,希望大家有好办法可以告诉我
我最后的解决办法只能是删掉函数文件内的中文注释。。。。