6 글 보임 - 1 에서 6 까지 (총 6 중에서)
-
글쓴이글
-
2023년 7월 11일 17:50 #90526
조승엽참가자질문이 몇개 있어요. 모델 전체 저장했다가 다른 파일에 test.csv를 예측하려고 보니 안되는듯 하고, feature_columns에 넣는 과정이 필요할것 같은데요. Q1, DenseFeatures는 모델 전체 저장해서 쓰기 힘들고, 가중치 저장으로 밖에 못쓰나요? 가중치만 저장해서 불려오는데 에러가 뜨더라고요. 입력은 train_ds = tf.data.Dataset.from_tensor_slices((dict(train_data), train_정답)) ~~ 생략~~ model = tf.keras.Sequential([ tf.keras.layers.DenseFeatures(feature_columns), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(1, activation='sigmoid'), ]) train_ds_batch = train_ds.batch(32) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc']) model.load_weights('./체크포인트들/checkpoint') model.evaluate(train_ds_batch)
를 입력했을때 Q2. ValueError: Shapes (681, 9) and (558, 9) are incompatible 이런 에러가 뜨는데 어떻게 하나요? 다른 파일에 불려와서 하는게 안되길래 fit 한곳 밑에다가 예측을 하려고 보니 자료를 어떻게 써야하는지 복잡하더라고요. Bing 검색 해서 아래처럼 썻는데요.
input_data = {'PassengerId': [test_data['PassengerId'][0]], 'Pclass': [test_data['Pclass'][0]], 'Name': [test_data['Name'][0]], 'Sex': [test_data['Sex'][0]], 'Age': [test_data['Age'][0]], 'SibSp': [test_data['SibSp'][0]], 'Parch': [test_data['Parch'][0]], 'Ticket': [test_data['Ticket'][0]], 'Fare': [test_data['Fare'][0]], 'Embarked': [test_data['Embarked'][0]]}
input_data_np = {} for key in input_data.keys(): input_data_np[key] = np.array(input_data[key])
예측값 = model.predict(input_data_np) print(예측값) Q3. 저렇게 하는게 맞나요? 아니면 더 쉽게 하는 방법이 있나요?
2023년 7월 11일 20:20 #90558
codingapple키 마스터모델저장잘했으면 train_ds_batch 부분이 전처리가 학습용데이터랑 똑같이 안되어서 그럴수도요 predict용 데이터도 학습 때와 똑같이 전처리해서 넣는게 좋습니다
2023년 7월 11일 22:03 #90566
조승엽참가자train_ds_batch = train_ds.batch(32)에서 train_ds 가 모델 저장할때 쓴거 복붙해온거 넣은거에요. test 바로 쓰기보다 일단 저게 되는지 안되는지 몰라서, 모델 fit했던 파일에 있는 거 가져왔어요.
import pandas as pd import tensorflow as tf import numpy as np
# data = pd.read_csv('test.csv') # 평균 = data['Age'].mean() # data['Age'].fillna(value=30, inplace= True) # data = data.dropna()
train_data = pd.read_csv('train.csv') train_data['Age'].fillna(value=30, inplace= True) train_data['Embarked'].fillna(value='S', inplace=True) train_정답 = train_data.pop('Survived') train_ds = tf.data.Dataset.from_tensor_slices((dict(train_data), train_정답))
feature_columns =[]
def 노말라이저함수(x): # return 0 과 1 사이로 압축한 x 최소값 = train_data['Fare'].min() 최대값 = train_data['Fare'].max() return (x - 최소값) / (최대값 - 최소값)
### Fare - numeric_column, normalizer feature_columns.append( tf.feature_column.numeric_column('Fare', normalizer_fn=노말라이저함수) ) ### SibSp - numeric_column feature_columns.append( tf.feature_column.numeric_column('SibSp') ) ### Parch - numeric_column feature_columns.append( tf.feature_column.numeric_column('Parch') )
### Age - bucketized_column Age = tf.feature_column.numeric_column('Age') Age_bucket = tf.feature_column.bucketized_column(Age, boundaries=[10,20,30,40,50,60]) feature_columns.append( Age_bucket )
### Sex - indicator_column vocab = train_data['Sex'].unique() cat = tf.feature_column.categorical_column_with_vocabulary_list('Sex', vocab) one_hot_cat = tf.feature_column.indicator_column(cat) feature_columns.append( one_hot_cat ) ### Embarked - indicator_column vocab = train_data['Embarked'].unique() cat = tf.feature_column.categorical_column_with_vocabulary_list('Embarked', vocab) one_hot_cat = tf.feature_column.indicator_column(cat) feature_columns.append( one_hot_cat ) ### Pclass - indicator_column vocab = train_data['Pclass'].unique() cat = tf.feature_column.categorical_column_with_vocabulary_list('Pclass', vocab) one_hot_cat = tf.feature_column.indicator_column(cat) feature_columns.append( one_hot_cat )
### Ticket - embedding_column vocab = train_data['Ticket'].unique() cat = tf.feature_column.categorical_column_with_vocabulary_list('Ticket', vocab) embad_cat = tf.feature_column.embedding_column(cat, dimension=9) feature_columns.append( embad_cat )
print(len(vocab))
model = tf.keras.Sequential([ # tf.keras.layers.DenseFeatures(feature_columns, input_shape=()), tf.keras.layers.DenseFeatures(feature_columns), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(1, activation='sigmoid'), ]) # model.summary() train_ds_batch = train_ds.batch(32)
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc']) model.load_weights('./체크포인트들/checkpoint') model.evaluate(train_ds_batch)
이렇게 입력을 했고요. 에러에서 뜨는 ValueError: Shapes (681, 9) and (558, 9) are incompatible 의 숫자는 model = tf.keras.Sequential([ 하기전에 vocab = train_data['Ticket'].unique() cat = tf.feature_column.categorical_column_with_vocabulary_list('Ticket', vocab) embad_cat = tf.feature_column.embedding_column(cat, dimension=9) feature_columns.append( embad_cat ) print(len(vocab)) ----- 이 숫자가 681네요. 558는 잘 모르겠고요. fit은 되지만 불러오는게 안되는것도 모르겠네요.
2023년 7월 12일 09:28 #90577
codingapple키 마스터load_weights 안에 경로입력시 .ckpt 파일경로 찾아서 입력해봅시다 아니면 model.fit(test_data, batch_size=1, epochs=1) 1회하고 불러와봅시다
-
글쓴이글
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
- 답변은 로그인 후 가능합니다.