首先,我将数据设置为随机化,如下所示:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from itertools import combinations as comb
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
dataset = pd.read_csv('Partial_quantarize.csv') #My dataset
print(dataset.columns.values)
pick = np.random.rand(len(dataset)) < 0.7
train = dataset[pick]
test = dataset[~pick]
#ingredient for training/testing the algorithm
coord = ['ra','dec']
cmodel_mags = ['Mag_u','Mag_g','Mag_r','Mag_i','Mag_z']
rad = ['rad_u', 'rad_g', 'rad_r', 'rad_i', 'rad_z']
dered = ['ext_u','ext_g','ext_r','ext_i','ext_z']
dered_color_indices = ['ext_ug','ext_gr','ext_ri','ext_iz']
coindex = ['coindex_u','coindex_g','coindex_r','coindex_i','coindex_z']
cmodel_color_indices = ['ug','gr','ri','iz']
prad50 = ['petroR50_u','petroR50_g','petroR50_r','petroR50_i','petroR50_z']
prad90 = ['petroR90_u','petroR90_g','petroR90_r','petroR90_i','petroR90_z']
#rad = ['petroRad_u','petroRad_g','petroRad_r','petroRad_i','petroRad_z']
#petro_color_indices = ['p_ug','p_gr','p_ri','p_iz']
#training models
model1 = cmodel_mags + cmodel_color_indices
model2 = cmodel_mags + cmodel_color_indices + rad
model3 = cmodel_mags + cmodel_color_indices + rad + coindex
model4 = dered + dered_color_indices
model5 = dered + dered_color_indices + rad
model6 = dered + dered_color_indices + rad + coindex
model7 = cmodel_mags + cmodel_color_indices + dered + dered_color_indices + rad + coindex
fullparms = coord + cmodel_mags + cmodel_color_indices + dered + dered_color_indices + rad + prad50 + prad90 + coindex
print(train[model4].shape,test[model4].shape) #this gives me (70061,9) (29939,9)
def nn_mlp(test, train, labels, k=7):
ylabel = train['redshift']
prediction = []
batch=1
no_bins = k*100 if k*100 < 1000 else 1000
max_z = np.max(train['redshift'].values)
min_z = np.min(train['redshift'].values)
model = Sequential()
model.add(Dense(len(labels), input_dim=len(labels), kernel_initializer='normal', use_bias=True, activation='relu'))
model.add(Dense(1, kernel_initializer='normal', use_bias=True))
model.compile(loss='mean_squared_error', optimizer='adam')
edges = np.histogram(train['redshift'].values[::batch], bins=no_bins, range=(min_z,max_z))[1]
edges_with_overflow = np.histogram(train['redshift'].values[::batch], bins=no_bins+1, range=(min_z, max_z))[1]
model.fit(train[labels].values[::batch], edges_with_overflow[np.digitize(train['redshift'].values[::batch], edges)], epochs=1)
for point in test[labels].values:
prediction.append(model.predict([point])[0])
return np.array(prediction)
pred_4 = nn_mlp(test, train, model4)
我的代码实际上可以运行,不管我设置了哪个年代, 但我不知道为什么我总是把最终输出作为
"ValueError: Error when checking input: expected dense_9_input to have shape (9,) but got array with shape (1,)"
在这里提供解决方案(答案部分),即使它出现在评论部分,也是为了社区的利益
此问题与形状不兼容有关,请将形状从(9,)改为(1,9)
下面是如何重塑的示例
输出:
从
prediction.append(model.predict([point])[0])
(即此处形状为(9,)更改为prediction.append(model.predict([[point]])[0])
(即此处形状为(1,9))后,问题得到解决对于重塑,可以使用
tf.reshape
和tf.expand_dims
使用tf重塑。重塑:
输出:
使用tf.expand_dims重塑形状:
输出:
相关问题 更多 >
编程相关推荐