Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 7.29.0 -- An enhanced Interactive Python.
In [1]:
...: """
...: Purpose: Train and test a CNN model using spectrograms of the DAIC dataset.
...: """
...:
...: from tensorflow.keras.preprocessing.image import ImageDataGenerator
...: import numpy as np
...: import os
...: import pandas as pd
...: from tensorflow.keras.models import Sequential
...: from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
...: from tensorflow.keras.optimizers import RMSprop
...:
...:
...: train_datagen = ImageDataGenerator(
...: rescale=1./255, # normalize pixel values
...: rotation_range=20, # rotate images by up to 20 degrees
...: width_shift_range=0.1, # shift images horizontally by up to 10%
...: height_shift_range=0.1, # shift images vertically by up to 10%
...: shear_range=0.1, # apply shearing transformation
...: zoom_range=0.1, # zoom in on images by up to 10%
...: horizontal_flip=True, # flip images horizontally
...: fill_mode='nearest' # fill in missing pixels with nearest value
...: )
...:
...:
...: val_datagen = ImageDataGenerator(rescale=1./255)
...:
...: train_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\train'
...: val_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\dev'
...:
...: batch_size = 16
...:
...: target_size = (224, 224)
...:
...:
...: df_li=[]
...:
...: flist=os.listdir(train_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="train"
...: df_li.append(df)
...:
...: flist=os.listdir(val_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="dev"
...: df_li.append(df)
...:
...:
...: test_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\test'
...:
...: flist=os.listdir(test_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="test"
...: df_li.append(df)
...: concatenated_df = pd.concat(df_li, ignore_index=True)
...:
...: index_df=pd.read_csv(r"C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\daicwoz_index_combined.csv")
...:
...: concatenated_df['Participant_ID'] = concatenated_df['file_path'].str.split('_').str[0]
...:
...: print(concatenated_df)
...:
...: index_df['Participant_ID'] = index_df['Participant_ID'].astype(str)
...:
...:
...:
...: merged_df=pd.merge(left=concatenated_df,right=index_df,left_on='Participant_ID',
...: right_on='Participant_ID')
...:
...:
...: train_datagen = ImageDataGenerator(
...: rescale=1./255,
...: rotation_range=20,
...: width_shift_range=0.1,
...: height_shift_range=0.1,
...: shear_range=0.1,
...: zoom_range=0.1,
...: horizontal_flip=True,
...: fill_mode='nearest'
...: )
...:
...:
...: val_datagen = ImageDataGenerator(rescale=1./255)
...:
...:
...:
...:
...: target_size = (224, 224)
...:
...:
...: batch_size = 16
...:
...: train_generator = train_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'train'],
...: directory=train_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...: val_generator = val_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'dev'],
...: directory=val_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...: model = Sequential()
...: model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Conv2D(32, (3, 3), activation='relu'))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Conv2D(64, (3, 3), activation='relu'))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Flatten())
...: model.add(Dense(512, activation='relu'))
...: model.add(Dense(256, activation='relu'))
...: model.add(Dense(1))
...:
...:
...: model.compile(loss='mean_squared_error', optimizer=RMSprop(lr=0.001), metrics=['mse'])
...:
...:
...: history = model.fit(
...: train_generator,
...: epochs=10, # Adjust number of epochs as needed
...: validation_data=val_generator
...: )
...:
...:
...: test_datagen = ImageDataGenerator(rescale=1./255)
...:
...:
...: test_generator = test_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'test'],
...: directory=test_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...:
...: test_loss, test_mse = model.evaluate(test_generator)
...:
...: print("Test MSE:", test_mse)
...:
...:
...: print("Test RMSE:", test_mse** 0.5)
...:
...:
...:
...: from sklearn.metrics import mean_absolute_error
...:
...:
...: test_loss, test_mse = model.evaluate(test_generator)
...:
...:
...: predictions = model.predict(test_generator)
...:
...:
...: true_labels = test_generator.labels
...:
...:
...: mae = mean_absolute_error(true_labels, predictions)
...:
...: print("Test MSE:", test_mse)
...: print("Test MAE:", mae)
file_path train_test_dev Participant_ID
0 303_AUDIO_libmelspec.jpg train 303
1 304_AUDIO_libmelspec.jpg train 304
2 305_AUDIO_libmelspec.jpg train 305
3 310_AUDIO_libmelspec.jpg train 310
4 312_AUDIO_libmelspec.jpg train 312
.. ... ... ...
184 467_AUDIO_libmelspec.jpg test 467
185 469_AUDIO_libmelspec.jpg test 469
186 470_AUDIO_libmelspec.jpg test 470
187 480_AUDIO_libmelspec.jpg test 480
188 481_AUDIO_libmelspec.jpg test 481
[189 rows x 3 columns]
Found 107 validated image filenames.
Found 35 validated image filenames.
WARNING:absl:`lr` is deprecated, please use `learning_rate` instead, or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.RMSprop.
Epoch 1/10
2024-12-23 02:59:14.788360: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
7/7 [==============================] - 5s 605ms/step - loss: 334.4738 - mse: 334.4738 - val_loss: 46.3762 - val_mse: 46.3762
Epoch 2/10
7/7 [==============================] - 4s 536ms/step - loss: 41.6043 - mse: 41.6043 - val_loss: 47.7859 - val_mse: 47.7859
Epoch 3/10
7/7 [==============================] - 4s 542ms/step - loss: 34.3368 - mse: 34.3368 - val_loss: 45.5575 - val_mse: 45.5575
Epoch 4/10
7/7 [==============================] - 4s 561ms/step - loss: 36.4852 - mse: 36.4852 - val_loss: 46.8101 - val_mse: 46.8101
Epoch 5/10
7/7 [==============================] - 4s 541ms/step - loss: 35.6259 - mse: 35.6259 - val_loss: 47.7516 - val_mse: 47.7516
Epoch 6/10
7/7 [==============================] - 4s 535ms/step - loss: 31.7727 - mse: 31.7727 - val_loss: 49.8830 - val_mse: 49.8830
Epoch 7/10
7/7 [==============================] - 4s 541ms/step - loss: 38.7467 - mse: 38.7467 - val_loss: 44.3217 - val_mse: 44.3217
Epoch 8/10
7/7 [==============================] - 4s 581ms/step - loss: 34.3152 - mse: 34.3152 - val_loss: 45.3872 - val_mse: 45.3872
Epoch 9/10
7/7 [==============================] - 4s 545ms/step - loss: 31.2468 - mse: 31.2468 - val_loss: 43.7906 - val_mse: 43.7906
Epoch 10/10
7/7 [==============================] - 4s 540ms/step - loss: 36.1619 - mse: 36.1619 - val_loss: 56.6529 - val_mse: 56.6529
Found 47 validated image filenames.
3/3 [==============================] - 0s 77ms/step - loss: 60.7944 - mse: 60.7944
Test MSE: 60.7944450378418
Test RMSE: 7.797079263278128
3/3 [==============================] - 0s 67ms/step - loss: 60.7944 - mse: 60.7944
3/3 [==============================] - 0s 63ms/step
Test MSE: 60.7944450378418
Test MAE: 6.8604941063738885
In [2]:
...: """
...: Purpose: Train and test a CNN model using spectrograms of the DAIC dataset.
...: """
...:
...: from tensorflow.keras.preprocessing.image import ImageDataGenerator
...: import numpy as np
...: import os
...: import pandas as pd
...: from tensorflow.keras.models import Sequential
...: from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
...: from tensorflow.keras.optimizers import RMSprop
...:
...:
...: train_datagen = ImageDataGenerator(
...: rescale=1./255, # normalize pixel values
...: rotation_range=20, # rotate images by up to 20 degrees
...: width_shift_range=0.1, # shift images horizontally by up to 10%
...: height_shift_range=0.1, # shift images vertically by up to 10%
...: shear_range=0.1, # apply shearing transformation
...: zoom_range=0.1, # zoom in on images by up to 10%
...: horizontal_flip=True, # flip images horizontally
...: fill_mode='nearest' # fill in missing pixels with nearest value
...: )
...:
...:
...: val_datagen = ImageDataGenerator(rescale=1./255)
...:
...: train_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\train'
...: val_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\dev'
...:
...: batch_size = 16
...:
...: target_size = (224, 224)
...:
...:
...: df_li=[]
...:
...: flist=os.listdir(train_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="train"
...: df_li.append(df)
...:
...: flist=os.listdir(val_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="dev"
...: df_li.append(df)
...:
...:
...: test_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\test'
...:
...: flist=os.listdir(test_dir)
...: df = pd.DataFrame(flist, columns=['file_path'])
...: df["train_test_dev"]="test"
...: df_li.append(df)
...: concatenated_df = pd.concat(df_li, ignore_index=True)
...:
...: index_df=pd.read_csv(r"C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\daicwoz_index_combined.csv")
...:
...: concatenated_df['Participant_ID'] = concatenated_df['file_path'].str.split('_').str[0]
...:
...: print(concatenated_df)
...:
...: index_df['Participant_ID'] = index_df['Participant_ID'].astype(str)
...:
...:
...:
...: merged_df=pd.merge(left=concatenated_df,right=index_df,left_on='Participant_ID',
...: right_on='Participant_ID')
...:
...:
...: train_datagen = ImageDataGenerator(
...: rescale=1./255,
...: rotation_range=20,
...: width_shift_range=0.1,
...: height_shift_range=0.1,
...: shear_range=0.1,
...: zoom_range=0.1,
...: horizontal_flip=True,
...: fill_mode='nearest'
...: )
...:
...:
...: val_datagen = ImageDataGenerator(rescale=1./255)
...:
...:
...:
...:
...: target_size = (224, 224)
...:
...:
...: batch_size = 16
...:
...: train_generator = train_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'train'],
...: directory=train_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...: val_generator = val_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'dev'],
...: directory=val_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...: model = Sequential()
...: model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Conv2D(32, (3, 3), activation='relu'))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Conv2D(64, (3, 3), activation='relu'))
...: model.add(MaxPooling2D((2, 2)))
...: model.add(Flatten())
...: model.add(Dense(512, activation='relu'))
...: model.add(Dense(256, activation='relu'))
...: model.add(Dense(1))
...:
...:
...: model.compile(loss='mean_squared_error', optimizer=RMSprop(lr=0.001), metrics=['mse'])
...:
...:
...: history = model.fit(
...: train_generator,
...: epochs=10, # Adjust number of epochs as needed
...: validation_data=val_generator
...: )
...:
...:
...: test_datagen = ImageDataGenerator(rescale=1./255)
...:
...:
...: test_generator = test_datagen.flow_from_dataframe(
...: merged_df[merged_df['train_test_dev_x'] == 'test'],
...: directory=test_dir,
...: x_col='file_path',
...: y_col='PHQ8_Score',
...: target_size=target_size,
...: batch_size=batch_size,
...: class_mode='raw'
...: )
...:
...:
...: test_loss, test_mse = model.evaluate(test_generator)
...:
...: print("Test MSE:", test_mse)
...:
...:
...: print("Test RMSE:", test_mse** 0.5)
...:
...:
...:
...: from sklearn.metrics import mean_absolute_error
...:
...:
...: test_loss, test_mse = model.evaluate(test_generator)
...:
...:
...: predictions = model.predict(test_generator)
...:
...:
...: true_labels = test_generator.labels
...:
...:
...: mae = mean_absolute_error(true_labels, predictions)
...:
...: print("Test MSE:", test_mse)
...: print("Test MAE:", mae)
file_path train_test_dev Participant_ID
0 303_AUDIO_libmelspec.jpg train 303
1 304_AUDIO_libmelspec.jpg train 304
2 305_AUDIO_libmelspec.jpg train 305
3 310_AUDIO_libmelspec.jpg train 310
4 312_AUDIO_libmelspec.jpg train 312
.. ... ... ...
184 467_AUDIO_libmelspec.jpg test 467
185 469_AUDIO_libmelspec.jpg test 469
186 470_AUDIO_libmelspec.jpg test 470
187 480_AUDIO_libmelspec.jpg test 480
188 481_AUDIO_libmelspec.jpg test 481
[189 rows x 3 columns]
Found 107 validated image filenames.
Found 35 validated image filenames.
WARNING:absl:`lr` is deprecated, please use `learning_rate` instead, or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.RMSprop.
Epoch 1/10
7/7 [==============================] - 5s 589ms/step - loss: 247.9928 - mse: 247.9928 - val_loss: 46.4466 - val_mse: 46.4466
Epoch 2/10
7/7 [==============================] - 4s 524ms/step - loss: 38.4016 - mse: 38.4016 - val_loss: 45.6399 - val_mse: 45.6399
Epoch 3/10
7/7 [==============================] - 4s 521ms/step - loss: 32.6128 - mse: 32.6128 - val_loss: 48.4184 - val_mse: 48.4184
Epoch 4/10
7/7 [==============================] - 4s 527ms/step - loss: 37.6835 - mse: 37.6835 - val_loss: 48.7759 - val_mse: 48.7759
Epoch 5/10
7/7 [==============================] - 4s 521ms/step - loss: 33.9311 - mse: 33.9311 - val_loss: 44.5810 - val_mse: 44.5810
Epoch 6/10
7/7 [==============================] - 4s 548ms/step - loss: 36.5681 - mse: 36.5681 - val_loss: 42.4600 - val_mse: 42.4600
Epoch 7/10
7/7 [==============================] - 4s 543ms/step - loss: 37.3873 - mse: 37.3873 - val_loss: 56.0737 - val_mse: 56.0737
Epoch 8/10
7/7 [==============================] - 4s 532ms/step - loss: 32.0164 - mse: 32.0164 - val_loss: 45.1685 - val_mse: 45.1685
Epoch 9/10
7/7 [==============================] - 4s 534ms/step - loss: 37.4296 - mse: 37.4296 - val_loss: 48.0202 - val_mse: 48.0202
Epoch 10/10
7/7 [==============================] - 4s 546ms/step - loss: 37.2004 - mse: 37.2004 - val_loss: 42.0721 - val_mse: 42.0721
Found 47 validated image filenames.
3/3 [==============================] - 0s 69ms/step - loss: 41.9760 - mse: 41.9760
Test MSE: 41.9759635925293
Test RMSE: 6.478885983911841
3/3 [==============================] - 0s 69ms/step - loss: 41.9760 - mse: 41.9760
3/3 [==============================] - 0s 74ms/step
Test MSE: 41.9759635925293
Test MAE: 5.4885614070486515
In [3]: